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.
In- och utmatning av UTF-8 i C/C++, hur?
- Johnny Rosenberg
- Inlägg: 1256
- Blev medlem: 23 jun 2007, 16:18
- OS: Ubuntu
- Utgåva: 22.10 Kinetic Kudu
- Kontakt:
- 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?
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?
är jag ute och cyklar?
fd. Shadow här på forumet
SV: In- och utmatning av UTF-8 i C/C++, hur?
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().
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.
From Left to Right: Wizard on Bicycle, Wizard on Bicycle, Wizard on Bicycle, Wizard on Bicycle, Wizard on Bicycle.
- 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?
Jag syftar inte på åäöÅÄÖ i första hand, utan snarare på tecken som ᚯ⠷∉∞≋ᴂ♬♮.
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?
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.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().
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?
-
- 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?
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å.