Unicode-Escape Sequenz in Char
-
Hallo Leute,
ich habe in C# einen String der aus einer Unicode-Escape-Sequenz besteht aus einer Datei ausgelesen. Der String sieht dementsprechend so aus:
"\\u20AC"
Er enthält nur diese eine Sequenz, im Prinzip also ein Unicode-Zeichen. Beim Auslesen aus einer Datei ersetzt .net ja automatisch das "\u20AC" durch "\\u20AC".Wie kann ich nun aus diesem String mit den doppelten Backslashes ein Char machen?
Probiert habe ich folgendes, was logischerweise in einer "Unrecognized escape sequence" endet.
Char unicodeChar = Char.Parse("\u" + "20AC"); Char unicodeChar = Char.Parse(String.Format("\u{0}","20AC"));
-
Nein, .Net ersetzt da gar nichts. Der doppelte Backslash kommt nur in der Anzeige im Debugger oder ähnlichem vor, der eigentliche String hat keine doppelten Backslashs drin.
-
zwergli schrieb:
Nein, .Net ersetzt da gar nichts. Der doppelte Backslash kommt nur in der Anzeige im Debugger oder ähnlichem vor, der eigentliche String hat keine doppelten Backslashs drin.
doch, natürlich. Wenn .net da kein \ ranhängen würde, müsste es ja intern nach dem Einlesen gleich als € speichern. In der Textdatei ist das ja nicht als Steuerzeichen, sondern als Plaintext gespeichert.
Wenn ich den String mit doppeltem Backslash versuche mit Char.Parse zu konvertieren, bekomme ich "Die Zeichenfolge darf nur genau ein Zeichen lang sein."
-
Das hier
char unicodeChar = char.Parse("\u20AC");
gibt mir das Euro-Symbol aus.
-
michme schrieb:
Das hier
char unicodeChar = char.Parse("\u20AC");
gibt mir das Euro-Symbol aus.
Ja sicher, das will ich ja auch erreichen. Nur eben im Programm, wo es verschiedene Unicode-Escape-Sequenzen vorkommen. Die sollen automatisch in ein entsprechendes Char gewandelt werden. (das funktioniert bis jetzt imho im Programm nicht, weil .net beim Auslesen aus der Datei das \ als \\ escaped.)
-
Dann versteh ich nicht was du meinst. sorry
Ich erhalte mit obigem und
textBox1.Text = unicodeChar.ToString(); label1.Text = unicodeChar.ToString();
immer das Symbol angezeigt.
-
michme schrieb:
Dann versteh ich nicht was du meinst. sorry
Ich erhalte mit obigen und
textBox1.Text = unicodeChar.ToString(); label1.Text = unicodeChar.ToString();
immer das Symbol angezeigt.
Lies dir nochmal den ersten Post von mir durch. Das Problem ist nicht, dass ich das Zeichen nicht anzeigen lassen kann, ich kriegs garnicht erst konvertiert.
Ich habe den 4stelligen Unicode-Code mit vorangestelltem "\\u", und komme davon nicht auf das entsprechende Zeichen. Hätte ich das ganze ohne doppelten Backslash, würde .net es sowieso richtig anzeigen.
-
und wenn du es eben nur mit einem \ parst? (so wie michme gezeigt...)
-
ser1al_ausgeloggt schrieb:
und wenn du es eben nur mit einem \ parst? (so wie michme gezeigt...)
Quellcode? DAS funktioniert eben nicht -.-
-
Wenn man im Quelltext
Char ch = Char.Parse("\u20ac")
schreibt so wird die "\u20ac" Sequenz vom Compiler vorher interpretiert. Und im übersetzen code steht dann an der stelle in diesem Beispiel dann das Euro-zeichen.
Aber die eingelesene Escape-Sequenz besteht aber aus mehreren Zeichen und damit kommt Char.Parse natürlich nicht klarRodney: Um die eingelesenen Unicode-Escapesequenzen im Programm zu darstellbaren Einzelzeichen zu konvertieren, langt es, wenn du die hex zahl nach dem "\u" in eine Zahl(z.b. Int32) konvertierst und den Zahlenwert als "Char" weiter verarbeitest.
z.b.
int num = 0; FileStream f = File.Open("test.txt", FileMode.Open); StreamReader str = new StreamReader(f); string s = str.ReadLine(); if (s[0] == '\\' && s[1] == 'u') { num = Convert.ToInt32(s.Substring(2), 16); char ch = (char)num; // oder Convert.ToChar(num); System.Console.WriteLine(ch.ToString()); }
test.txt enthält nur den string \u20ac
-
Rodney schrieb:
doch, natürlich. Wenn .net da kein \ ranhängen würde, müsste es ja intern nach dem Einlesen gleich als € speichern.
Hmm? Verstehe ich nicht - Wieso sollte .net aus einer Unicode-Escape-Sequenz automatisch ein Zeichen raus bauen?
Ich höre zum ersten Mal davon das überhaupt jemand Unicode-Strings mit Escape-Zeichen in ner Textdatei speichert statt direkt z.B. als UTF8-Datei.
-
wird ja auch garnicht behauptet das .net ein zeichen ausbaut.
Ansonsten sei es mal als gegeben hingestellt, das die Zeichen so in der Datei stehen. Sie können ja durchaus von einem system kommen, das kein utf8 kodieren kann.
-
firefly schrieb:
Rodney: Um die eingelesenen Unicode-Escapesequenzen im Programm zu darstellbaren Einzelzeichen zu konvertieren, langt es, wenn du die hex zahl nach dem "\u" in eine Zahl(z.b. Int32) konvertierst und den Zahlenwert als "Char" weiter verarbeitest.
Super, danke! Genau soetwas habe ich gesucht, ich habe nur versucht mit diesem 4stelligen Code irgendwie ein Char zu erstellen und bin nicht darauf gekommen, dass vorher in ein Int32 zu konvertieren.
Gruß, Rodney