Avatar billede fedtoere Praktikant
01. august 2008 - 09:27 Der 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 ?
Avatar billede hrc Mester
01. august 2008 - 10:37 #1
Det hjælper dig ikke noget nu, men er den næste version af Delphi (hvis den kommer) ikke unicode?
Avatar billede tolderlund Nybegynder
01. august 2008 - 15:25 #2
Den næste version af Delphi understøtter unicode.
Jeg gætter på at den bliver frigivet til salg i løbet af 1-2 måneder.
Avatar billede pidgeot Nybegynder
01. august 2008 - 17:41 #3
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.
Avatar billede fedtoere Praktikant
14. februar 2011 - 23:20 #4
øv - kræver ny delphi version. Spørgsmål lukkes.
Avatar billede Ny bruger Nybegynder

Din løsning...

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.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester