Sida 1 av 1

In- och utmatning av UTF-8 i C/C++, hur?

Postat: 13 jan 2008, 02:41
av Johnny Rosenberg
Då en "char" tydligen motsvarar en byte infinner sig, för en nybörjare som jag, frågan hur man hanterar UTF-8 (exempelvis) i C/C++, eftersom vissa tecken kan vara flera bytes. Något enkelt exempel kanske, om någon orkar?

J.R.

SV: In- och utmatning av UTF-8 i C/C++, hur?

Postat: 13 jan 2008, 10:47
av ninetwozero
jag gissar på att du syftar på bland annat å, ä och ö. dessa tar enbart upp en byte då man kan använda sig av hex för att ange dom (\x86, \x84, \x94).

är jag ute och cyklar?

SV: In- och utmatning av UTF-8 i C/C++, hur?

Postat: 13 jan 2008, 11:17
av gasol
Rent allmänt är det inget som hindrar dig från att läsa UTF-8 tecken, även om dessa lagras i flera bytes.

tex funktionen strlen(char *str) returnerar inte hur många tecken som finns i strängen, utan hur många bytes som krävs för att representera strängen.

I Unix så är allt strömmar av bytes, även så strängar i UTF-8. Problemet skulle kanske kunna uppstå när du försöker att läsa tecken för med funktioner som getchar().

SV: In- och utmatning av UTF-8 i C/C++, hur?

Postat: 13 jan 2008, 11:58
av Johnny Rosenberg
Jag syftar inte på åäöÅÄÖ i första hand, utan snarare på tecken som ᚯ⠷∉∞≋ᴂ♬♮.
gasol skrev: Rent allmänt är det inget som hindrar dig från att läsa UTF-8 tecken, även om dessa lagras i flera bytes.

tex funktionen strlen(char *str) returnerar inte hur många tecken som finns i strängen, utan hur många bytes som krävs för att representera strängen.

I Unix så är allt strömmar av bytes, även så strängar i UTF-8. Problemet skulle kanske kunna uppstå när du försöker att läsa tecken för med funktioner som getchar().
Så hur deklarerar man och med vilket kommando läser man lämpligast in ett UTF-8-tecken i taget obuffrat? Vi kan anta att vi läser från tangentbordet och att detta är konfigurerat så att de "specialtecken" man vill ha är lätt åtkomliga via AltGr.

Det problem jag, kanske felaktigt ser, är att om jag exempelvis trycker på den tangentkombination som jag låtit motsvara tecknet "∞", så kommer två bytes (eller är det tre?) att lämna tangentbordet och att mitt klåparprogram då kommer att anse att jag tryckt på två (eller tre) tangenter och därmed åstadkommit två (eller tre, som sagt) olika tecken...

Är det bara jag som krånglar till det för mig?

SV: In- och utmatning av UTF-8 i C/C++, hur?

Postat: 13 jan 2008, 12:24
av Lars
Jag har ingen erfarenhet av detta... men ändå. I wchar.h finns det funktioner för typen wchar (som nog inte är UTF-8 utan kanske ren 32-bitars Unicode?). T.ex. så finns getwchar(), fgetwc(), wcslen(). Dessutom finns wcsto*() för att konvertera "wide character string" till annat. Delar av det här är säkert locale-beroende också.