01. september 2005 - 14:15Der er
14 kommentarer og 1 løsning
Konvertering af tegnsæt fra Latin-1 til UTF-8
Min bruger indtaster oplysninger i en formular i ISO-8859-1 (Latin1). Disse oplysninger sendes direkte til en webservice som bruger UTF-8. Derfor er der ÆØÅ-problemer.
Jeg vil konvertere det brugeren har indtastet, til UTF-8. Helst med en generel tegnsæt-konverterings-metode. Nogen der kan hjælpe?
Webservicen får UTF-8 at vide og modtager i ISO-88569-1
Bruger indtaster i ISO-8859-1
Umiddelbart efter vil jeg konvertere det indtastede til UTF-8, så det kan sendes ubesværet med webservicen. Jeg vil altså foretage konverteringen i min webservice client.
Min client fortæller webservicen at indholdet er UTF-8. Og det virker også når indholdet rent faktisk er UTF-8.
Så det du reelt har brug for er et filter som modtager den rene HTTP request med SOAP XML og enten kan ændre charset label eller indhold til at være det rigtige charset inden den parses af .NET framework koden (som så smider de illegale UTF-8 tegn helt væk) ?
Nej. I den applikation hvor brugeren indtaster sine oplysninger, har jeg de rigtige oplysninger tilgængelige - de eksisterer bare kun i et forkert tegnsæt. Jeg vil konvertere dem til det rigtige tegnsæt inden jeg overhovedet begynder at tænke på at de skal sendes videre til en webservice.
Måske virker et af mine eksempler øverst. Måske virker alle tre. Jeg indså ikke at tegnsæt-fejlen opstod et andet sted i programmet. Jeg var ikke opmærksom på forskellen på "escape", "encodeURI" og "encodeURIComponent" i JavaScript.
Jeg har taget fejl af hvordan strenge virker i .NET. Derfor var jeg skrupforvirret. Jeg vil lige kort beskrive det, til hvis andre skulle dumpe forbi dette spørgsmål.
En streng i .NET er _altid_ Unicode. Hvis du henter noget iso-8859-1 tekst ind i din applikation bliver det til Unicode. Hvis du skriver noget iso-8859-1 tekst fra din applikation til en fil, bliver det konverteret fra unicode til iso-8859-1.
Unicode er altså tegnsættet der binder alle de andre tegnsæt sammen. Og .NET benytter som sagt altid Unicode internt, uanset om du skriver andet i Web.config, Machine.config eller andet.
Du kan konvertere din streng til et UTF8-byte-array, f.eks. hvis du gerne vil skrive til en fil med UTF-8. Men hvis du konverterer dit UTF8-array tilbage til en streng, bliver den til Unicode igen.
Kloge hoveder må meget gerne rette mig hvis jeg tager fejl.
Synes godt om
Ny brugerNybegynder
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.