Gå til innhold

Tekstboksen takler ikke spesielle tegn (som Я)


Anbefalte innlegg

Som tittelen sier... har en tekstboks, men den takler ikke spesielle tegn. Når jeg prøver å lime inn f.eks. Я, blir det bare til et spørsmålstegn. Vet ikke om dere skjønner hva jeg mener, men er det noen som vet hva problemet kan være?

 

Bruker Visual Basic 6, hvis det har noe å si.

Endret av skolegutten
Lenke til kommentar
Videoannonse
Annonse

Visual Basic 6.0 er vel ASCII, dvs. at den bare takler 256 forsjkellige tegn, mens det innebygde tegnsettet i Windows NT (Windows XP blant annet) er Unicode (UTF-16) derfor kan du fint kopiere dette, men Visual Basic programmet ditt tar ikke imot 16-bit tekst-strenger.

 

Jeg aner ikke om du kan gjøre noe med dette.

Lenke til kommentar
Visual Basic 6.0 er vel ASCII, dvs. at den bare takler 256 forsjkellige tegn, mens det innebygde tegnsettet i Windows NT (Windows XP blant annet) er Unicode (UTF-16).

7048615[/snapback]

Visual Basic 6.0 støtte Unicode, da den internt benytter BSTR med UTF-16. Siden problemet ble løst ved å bytte kontroll, vil jeg tro det er de innebyggede kontrollene som ikke støtter Unicode (dersom riktig skrifttype har blitt benyttet).

Lenke til kommentar
Men... er ikke string datatypen 8-bit da? siden du må bruke convert funksjonen for å lage Unicode stringer hvis du skal passe det til funksjoner....

7055881[/snapback]

Nei, dette er fordi VB automatisk konverterer BSTR (i VB 3, HLSTR) til en null-terminert ASCII-streng før den sendes til API. Av og til, når en skal sende en Unicode-streng, og ikke en ASCII-streng, til en API, konverterer man UTF-16-strengen til UTF-16 igjen (slik at hver karakterer blir 32-bit), som så konverteres tilbake til UTF-16 når API-funksjonen kalles. Dette er jo såklart fryktelig bakvendt, for ikke å nevne grusomt rent ytelsesmessig. En annen vei rundt dette er å bruke StrPtr og ByVal, men da må en ofte også legge til en nullkarakter ettersom BSTR ikke er nullterminert.

Lenke til kommentar

Dette var vrient, jeg har lest mye uten å finne Selve Løsningen.

 

Så langt; String internt er visst Unicode og det skal være null problem å håndtere de dateene. Men det er ut igjen fra string-variabelen til whatever som er trøblete. Og da gjelder det kanskje å temme konverteringsfunksjonen StrConv, som har parametre til og fra Unicode, men jeg har ikke fått eksemplene til å virke tilfredsstillende hittil.

 

Mange andre eksempler bruker bytearray istedetfor string.

Dim Unicodesetning as Byte()

men jeg får ?ene ut av dette også.

 

Dette er riktig lærerikt, men jeg har ingen hjelp til deg enn så lenge.

Beste hilsen Harald

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...