01. august 2008 - 09:27Der er
3 kommentarer og 1 løsning
hjælp til char datatype på op til 21 bit i Delphi 7
Mit problem er at jeg ønsker at behandle Unicode data fra hele verden. Til dette bruger jeg UTF-8, jeg har lavet en funktion der konverterer ud fra 1,2,3 og 4 byte unicode format.
Måden dette skal fungere på er at der for de enkelte sprog sættes Windows codepage 1252, 1251, osv op. For koreanske tegn kan dette være Win cp 949 som er et dobbelt byte karakter sæt.
Her opstår mit problem så, fordi når disse data behandles kan jeg løbe ind i at jeg skal benytte 21 bit pr karakter. Jeg er lidt i tvivl om jeg overhovedet kan supportere dette i Delphi og om Windows Codepage generelt supporterer dette (og hvordan).
Pt bruger jeg en word til at gemme karakterer i men den er jo kun på 16 bit så det betyder at jeg lige nu kun kan behandle unicode på op til 3 bytes (effektiv win cp output fra en sådan er 16 bit).
Er der nogle der kan hjælpe mit lidt i den rigtige retning ?
Traditionelt ville man konvertere det internt til UTF-16 (WideChar/WideString - der er funktioner i Windows API'et), da det er dette API'erne reelt arbejder med. Hvis du bruger Win32-udgaven, skal du dog enten skrive dine egne komponenter når du skal til at vise det her, bruge 3. parts komponenter, eller vente på Tiburón (som kommer senere i år - indenfor et par måneder, vil jeg tro), da VCL endnu ikke understøtter Unicode. Delphi.NET understøtter Unicode i kraft af .NET.
Situationen med de 21 bits er tegn der ligger udenfor BMP. I UTF-16 vil man omdanne dette til 2 tegn, med U+D800-U+DBFF som range til den første del, og U+DC00-U+DFFF til anden del - disse er nemlig aldrig "officielle" tegn, og man kan derfor se at der er tale om surrogater.
Hvis du finder det meget vigtigt at du altid har et helt tegn af gangen, så skal du have fat i UTF-32 - men det gøres meget sjældent, da det kræver betydeligt mere hukommelse, og tegn uden for BMP sjældent forekommer.
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.