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

Här diskuteras programmering och utveckling
Användarvisningsbild
Johnny Rosenberg
Inlägg: 1256
Blev medlem: 23 jun 2007, 16:18
OS: Ubuntu
Utgåva: 22.10 Kinetic Kudu
Kontakt:

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

Inlägg 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.
Vänliga hälsningar

Johnny Rosenberg
ジョニー・ローゼンバーグ

IEEE 1541 - binära prefix
ISO 8601 - datum och tid
Användarvisningsbild
ninetwozero
Inlägg: 973
Blev medlem: 07 feb 2007, 22:43
OS: Ubuntu
Utgåva: 6.06 Dapper LTS
Ort: ---

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

Inlägg 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?
Användarvisningsbild
gasol
Inlägg: 405
Blev medlem: 27 jul 2007, 14:57
Kontakt:

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

Inlägg 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().
The Black Mountain Scorpion Hoedown Bluegrass Experience Gang
From Left to Right: Wizard on Bicycle, Wizard on Bicycle, Wizard on Bicycle, Wizard on Bicycle, Wizard on Bicycle.
Användarvisningsbild
Johnny Rosenberg
Inlägg: 1256
Blev medlem: 23 jun 2007, 16:18
OS: Ubuntu
Utgåva: 22.10 Kinetic Kudu
Kontakt:

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

Inlägg 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?
Vänliga hälsningar

Johnny Rosenberg
ジョニー・ローゼンバーグ

IEEE 1541 - binära prefix
ISO 8601 - datum och tid
Lars
Inlägg: 6191
Blev medlem: 14 jan 2007, 19:31
OS: Ubuntu
Utgåva: 22.10 Kinetic Kudu
Ort: Stockholm

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

Inlägg 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å.
Skriv svar

Återgå till "Programmering och webbdesign"