| 

.NET C# Java Javascript Exception

5
Hi,

ich habe eine Testdatei in der der ursprünliche String "Dies ist das Haus vom Nikolaus." als Binary-String im Unicode gespeichert ist.

44,00,69,00,65,00,73,00,20,00,69,00,73,00,74,00,20,00,64,00,61,00,73,00,20,00,48,00,61,00,75,00,73,00,20,00,76,00,6f,00,6d,00,20,00,4e,00,69,00,6b,00,6f,00,6c,00,61,00,75,00,73,00,2e,00,00,00


Ich will diesen Byte-String nun in eine lesbare Form zurück konvertieren. Also habe ich den ganzen Kram in ein byte-Array gepackt und gedacht dieses dann in ein String zu konvertieren. vorgegangen bin ich wie folgt:

byte[] test1 = System.Text.Encoding.Unicode.GetBytes(strValue);
value = System.Text.Encoding.Unicode.GetString(test1);


Nu steht aber dummerweise in "value" wieder der Byte String drinnen und nicht der lesbare. Kann mir da mal jemand das Brett vorm Kopf entfernen?

Danke

Gruss Dave
News:
16.08.2012
david.koenig09 173 6
Mal andersrum gefragt: Hast Du das selbst so gespeichert, oder bekommst Du das so vorgesetzt?
ffordermaier 16.08.2012
4 Antworten
4
Hier eine einfachere Lösung:

string strSource = "44,00,69,00,65,00,73,00,20,00,69,00,73,00,74,00,20,00,64,00,61,00,73,00,20,00,48,00,61,00,75,00,73,00,20,00,76,00,6f,00,6d,00,20,00,4e,00,69,00,6b,00,6f,00,6c,00,61,00,75,00,73,00,2e,00,00,00";

byte[] bytSource = strSource.Split(',').ToList().ConvertAll<byte>(s => Convert.ToByte(s, 16)).ToArray();
string strResult = System.Text.Encoding.Unicode.GetString(bytSource);

Console.WriteLine(strResult);


Der Code den du geschrieben hast, kann so nicht funktionieren, da GetBytes den String "44,00,..." in Bytes umwandelt. Dh. zu den Zeichen 4 4 , 0 0 , ... jeweils die Bytes. Du musst zuvor also den Eingangsstring Splitten um die einzelnen Hex-Werte zu bekommen. Im folgenden musst du diese in Bytes und somit ein Byte-Array konvertieren. Und im Anschluss kannst du selbiges dann zu einem String konvertieren.
16.08.2012
Floyd 14,6k 3 9
Floyd 14,6k 3 9
nun, ich kann dir +1 geben und habe dies auch getan, immerhin ist deine Lösung auch schön einfach :)
Karill Endusa 16.08.2012
3
Wie Karill (der mir zuvorkam, aber da hatte ich schon getippt ;) bereits sagte den ersten Teil weglassen, wenn der byte array Unicode ist:

byte[] test = {0x44, 0x00, 0x69, 0x00, 0x65, 0x00, 0x73, 0x00, 0x20, 0x00, 0x69, 0x00, 0x73, 0x00, 0x74, 0x00, 0x20, 0x00, 0x64,
0x00, 0x61, 0x00, 0x73, 0x00, 0x20, 0x00, 0x48, 0x00, 0x61, 0x00, 0x75, 0x00, 0x73, 0x00, 0x20, 0x00, 0x76, 0x00, 0x6f, 0x00, 0x6d,
0x00, 0x20, 0x00, 0x4e, 0x00, 0x69, 0x00, 0x6b, 0x00, 0x6f, 0x00, 0x6c, 0x00, 0x61, 0x00, 0x75, 0x00, 0x73, 0x00, 0x2e, 0x00};
string aString = System.Text.Encoding.Unicode.GetString(test);
16.08.2012
puls200 3,8k 7
+1 und das mit dem "da hatte ich schon getipp" kommt mir bekannt vor :)
Karill Endusa 16.08.2012
2
Schneller und vor Allem unsauberer Ansatz, aber er funktioniert:
string s = "44,00,69,00,65,00,73,00,20,00,69,00,73,00,74,00,20,00,64,00,61,00,73,00,20,00,48,00,61,00,75,00,73,00,20,00,76,00,6f,00,6d,00,20,00,4e,00,69,00,6b,00,6f,00,6c,00,61,00,75,00,73,00,2e,00,00,00";
List<string> ls = new List<string>(s.Split(','));
List<byte> lb = new List<byte>();
foreach(string s2 in ls)
{
lb.Add((byte)int.Parse(s2, System.Globalization.NumberStyles.HexNumber));
}
string v = System.Text.Encoding.Unicode.GetString(lb.ToArray());
MessageBox.Show(v);
in deinem ursprünglichen String stehen ja schon die codierten Werte...
Alles, was du machst, ist den String einmal Unicode codieren und danach wieder decodieren, was dein Eingangsstring wiedergibt!

Hoffe, damit den Grundstein für einen besseren Lösungsansatz geliefert zu haben :)

so far
Karill Endusa
16.08.2012
Karill Endusa 1,5k 1 9
Ein wenig umständlich aber ich würde dir troztdem gern +1 geben wenn es gehen würde -.-
Floyd 16.08.2012
0
Aaah, jetzt habe ich's kapiert. Vielen Dank. Eigentlich auch irgendwie logisch, wenn man eine Weile drüber nachdenkt. Übrigens, um die Frage von ffordermaier zu beantworten: Dass bekomme ich so vorgesetzt. Ich arbeite aktuell an einem registry Import Utility und der Wert kommt aus einer reg Datei, die aus einem regedit.exe Export stammt.
16.08.2012
david.koenig09 173 6

Stelle deine .net-Frage jetzt!
TOP TECHNOLOGIES CONSULTING GmbH