Håndtering av en Unicode-streng i versjoner Delphi <= 2007

stemmer
9

Bakgrunn: Det spørsmålet gjelder versjoner av Delphi under 2009 (dvs. uten Unicode støtte inne i). Jeg har en spesifikasjon som krever meg å sende et Unicode kodet streng over en TCP-tilkobling, men jeg har ikke Delphi 2009.

Spørsmål Er det en enkelt funksjon eller svært lite bibliotek (jeg trenger ikke for mye bulk) som jeg kan bruke til å kode en enkelt streng i UTF-8 umiddelbart før sending over ledningen? Som en andre del av spørsmålet mitt: Hvis det er UTF-8-kodet strenger blir sendt tilbake som et svar, jeg tror jeg vil da trenge en annen funksjon for å få det tilbake i en Delphi streng format. Jeg forstår begrensningene av slike Unicode-støtte på denne måten.

Publisert på 20/12/2008 klokken 08:55
kilden bruker
På andre språk...                            


5 svar

stemmer
6

Bruk typen widestring og kodingsfunksjoner til / fra utf8 (UTF8Encode / UTF8Decode)

Ikke bruk streng type , og ikke bruk Ansi-funksjoner - hvis du gjør det, du mister informasjon.

Svarte 20/12/2008 kl. 10:16
kilden bruker

stemmer
5

Konvertering en pre-Delphi 2009 søknad til Unicode er vanskelig, men gjennomførbart. Jeg vil dele den opp i 3 oppgaver.

  1. Først må du kontrollere databasen håndterer Unicode-strenger. Fortrinnsvis UTF-16 støtte. Sørg for at alle databasekode håndterer widestrings riktig, og driverne du bruker håndtaket dette ok også.
  2. Konvertere all forretningslogikk fra å bruke strenger å bruke WideStrings. Det er veldig lett å gå glipp av noen, og du vil ikke få noen feil, så vil kompilatoren implisitt konvertere widestring til streng hvis du glemmer noen metoder. Også må du endre alle standardstrengfunksjoner til WideString ekvivalenter. Denne prosessen må utvide til noen tredje-del komponenter du kan bruke.
  3. Siste del er å endre standard og tredjeparts visuelle komponenter du måtte ha til WideString ekvivalenter. Dette må gjøres hvor enn du skal vise strenger som kan inneholde Unicode-tegn.

På toppen av alt som gjør at testingen er grundig, og bruker Unicode-tegn som faktisk bruker den høye byte. Hvis du bare teste ved hjelp av det latinske tegnsett, vil du gå glipp bugs.

Svarte 20/12/2008 kl. 11:11
kilden bruker

stemmer
3

Hvis alt du trenger å gjøre er å faktisk konvertere program-interne strenger fra systemet koding til UTF-8 og tilbake, deretter bruke bibliotekfunksjoner som Uwe Raabe nevnt. Hvis du fortsatt er på Delphi 4 eller 5 (som ikke har disse funksjonene), kan du bruke funksjonene som er i GNU gettext for Delphi .

Og ikke la alle svarene om å gå helt WideString skremme deg - bruke UTF-8 som tegnkoding for datautveksling (dette er hvordan jeg forstår spørsmålet ditt) bør være mulig i en normal Ansi Delphi program uten store problemer, så lenge du arbeider med data som er 100% representable i Windows-koding.

Svarte 20/12/2008 kl. 13:56
kilden bruker

stemmer
6

Jeg bygde en full unicode programmet uten å bruke Delphi 2009 (før det er release).

Jeg har brukt følgende:

  1. Bruk widestring som hoved streng datatype.

  2. Brukte database komponent med unicode støtte (ADO bruk widestring også, men jeg gjorde ikke' bruke det cuz det ikke håndterer unicode feltnavnene).

  3. Brukte gratis TNTControls for UI, fungerte fint, men det er samme som standardkontroller, har ikke mye funksjoner som andre tredjeparts kontroller.

  4. Jeg har setup en VM med annet språk, så jeg kan teste versjonen i annet system som ikke støtter språket mitt.

  5. Fastreport var min rapporteringsverktøy som støtter Unicode også.

også har jeg brukt DIConverters fra Delphi Inspirasjon til å konvertere en database fra ansi til UTI8 med sine funksjoner, du kan bruke den for konvertering fra / til UTF8, og det er freeware ;-)

det er også en åpen kildekode Delphi grunnleggende , som har usefual funksjon for Unicode.

men jeg tror, ​​hvis du kunne bruke D2009 for full støtte Unicode, vil arbeidet være mye enklere og raskere, fordi du ikke vil bruke en langsom widestring datatype, og du vil finne de fleste av tredjepart tilbudt en Unicode-versjon eller arbeider nå den.

Svarte 20/12/2008 kl. 14:10
kilden bruker

stemmer
26

Delphi versjoner før Delphi 2009 har har støtte for Unicode bygget i. WideStringTypen har vært tilgjengelig siden Delphi 4, tror jeg, kanskje tidligere. WideStringer ikke like bra som den nye UnicodeStringtypen, men fortsatt har 16-bits Unicode-tegn, og du kan skrive støpt den til PWideCharå sende strenger til Unicode API funksjoner. Den Windowsenhet erklærer de fleste av "brede" versjoner av API-funksjoner, og det er ingenting å stoppe deg fra å erklære andre funksjoner selv hvis du finner noen mangler.

Hva tidligere versjoner ikke har, er Unicode støtte i VCL. For det, kan du bruke Tnt Unicode-kontroller . De pleide å være gratis. Ser ut som det er noen steder der den nyeste gratis versjon er fortsatt tilgjengelig: (1) , (2) .

Den JCL har et par av enheter for å arbeide med Unicode. Den JclWideStringsEnheten har for det meste lettvektsverktøyfunksjoner. Den JclUnicodeenhet er mer fullstendig, men den inneholder også en betydelig kilde for bestemmelse av karakteregenskapene til alle Unicode tegn.

Med JCL har du noen valg for klasser å holde lister over WideStringverdier. Jeg tror Delphi 7 leveres med en klasse for det.

Tror ikke at bare fordi du ikke har Delphi 2009 kan du ikke skrive et Unicode-program.

Hvis du har en WideStringverdi, og du ønsker å kode det som UTF-8, deretter ringe Utf8Encodefunksjon. Det vil returnere en AnsiStringverdi, eller muligens Utf8String, hvis Delphi versjon erklærer at type. Det er ikke det samme som Delphi 2009 er Utf8Stringtype, though. Delphi 2009 s vil automatisk konvertere til UnicodeStringeller AnsiString(x)og vice versa i oppdrag uttalelser. Tidligere versjoner har bare én AnsiStringtype, slik at du må holde styr selv hvilke variabler holde UTF-8 data og som holder Ansi data. (Ungarsk notasjon på variable og parameternavn kan hjelpe deg å holde orden.) Og selvfølgelig, det er også en Utf8Decodefunksjon for å konvertere UTF-8 data tilbake til WideString.

For å håndtere andre tegnsett, du ønsker å sjekke ut Open XML , et gratis XML bibliotek for Delphi. Som en del av XML håndtering, er det støtte for konvertering mellom 70 forskjellige kodinger.

Svarte 20/12/2008 kl. 14:31
kilden bruker

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more