27. oktober 2004 - 19:40
Der er
11 kommentarer og 1 løsning
Ascii til unicode konvertering
Hej Er der en "nem" måde at konvertere fra ascii til unicode på i csharp. Hvordan skal jeg gribe det an hvis jeg f.eks har en variabel som indeholder en streng som f.eks hedder "hello world", og jeg vil konvertere den til unicode ?
Annonceindlæg tema
27. oktober 2004 - 19:43
#1
string's er altid i unicode i C# ! Når du udskriver den til en fil kan du vælge mellem forskellige encodinger: ASCII, ISO-8859-1, UTF-8 etc.. Så hvad vil du ?
27. oktober 2004 - 20:12
#2
hmm jeg hvad vil jeg egentlig.. nu blev jeg lige forvirret *S* Ok måske jeg har misforstået det lidt, så jeg beskriver lige hvad det gerne skal ende op i jeg gerne vil: lad os tage ordet 'HEJ' , det som jeg gør i "hånden" , er at jeg laver HEJ til hex , så bliver det til : 72 69 74 Det konvertere til så til binær: 1001000 1000101 1001010 Men det er 7 bit, og jeg skal have det i 8 bit. så det konvertere jeg ved at "flytte" sidste bit i Eop til H og flytte de 2 sidste bit op til E Det giver så: 11001000 10100010 00010010 Og ja det konvertere jeg så tilbage til hex c8 A2 12 Og det er så hvad jeg gerne vil ende op med.. Og nu er mit "nye" spørgsmål så, findes der ikke noget smartere til det ? jeg ved faktisk ikke HELT hvad det er jeg gør, udover at jeg vil have
27. oktober 2004 - 20:18
#3
Normalt vil man sige at 72 69 74 er 01001000 01000101 01001010 altså 8 bit per bogstav (altid ved ASCII og ISO-8859-1, normalt ved UTF-8) Er du igang med noget hardware tæt programmering eller ?
27. oktober 2004 - 20:44
#5
.. prøv at kigge på System.Text.Encoding klassen
27. oktober 2004 - 20:45
#6
27. oktober 2004 - 21:44
#7
Det der har vist ikke meget med Unicode at gøre. Og jeg tror heller ikke at der er noget rigtigt brugbart i System.Text.Encoding. Der skal special kode til !
27. oktober 2004 - 21:44
#8
using System; using System.Text; public class BitFun { private static void From8To7(byte[] b, ref int boffset, byte[] res, ref int resoffset) { long temp = 0; int blen = Math.Min(b.Length - boffset, 8); for(int i = 0; i < blen; i++) { temp |= (((long)b[boffset + i]) << (i * 7)); } boffset += blen; int reslen = (blen*7+7)/8; for(int j = 0; j < reslen; j++) { res[resoffset + j] = (byte)((temp >> (j * 8))& 0xFF); } resoffset += reslen; } public static byte[] Encode(string s) { byte[] b = Encoding.ASCII.GetBytes(s); int boffset = 0; byte[] res = new byte[(b.Length*7+7)/8]; int resoffset = 0; while(boffset < b.Length) { From8To7(b, ref boffset, res, ref resoffset); } return res; } public static void Main(string[] args) { byte[] data = Encode("hellohello"); for(int k = 0; k < data.Length; k++) { Console.Write(String.Format("{0:X2} ",data[k])); } Console.WriteLine(); } }
27. oktober 2004 - 21:44
#9
Output: E8 32 9B FD 46 97 D9 EC 37
27. oktober 2004 - 21:44
#10
Jeg tog eksemplet fra linket
27. oktober 2004 - 22:14
#11
Hold da op, du har simpelthen løst mit problem for mig!! Endnu engang imponerer du mig Arne. Jaa jeg ville jo gerne sende dig en flaske vin, men det får jeg jo nok ikke lov til *S* Men mange mange tak for hjælpen..
27. oktober 2004 - 22:16
#12
Jeg ligger et svar så
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.