Laden...

WebRequest: Zeichenfolgen wie "\u00E4" in das entsprechende Unicode-Zeichen umwandeln

Erstellt von Whinyowea vor 11 Jahren Letzter Beitrag vor 11 Jahren 6.102 Views
W
Whinyowea Themenstarter:in
56 Beiträge seit 2009
vor 11 Jahren
WebRequest: Zeichenfolgen wie "\u00E4" in das entsprechende Unicode-Zeichen umwandeln

Hallo liebe Community,

ich arbeite mit den WebRequest Klassen und möchte mit einem Server kommunizieren. An sich klappt alles eigentlich ganz gut, nur schickt der Server mit gelegentlich (z.B. bei Umlauten) mit Unicode codierte Zeichen zurück. Die sehen dann in etwa so aus: \u00E4 (kleines: ä).

Gibt es in C# eine möglichkeit alle diese Zeichen aus Unicode in normale Zeichen zurückzuwandeln?
So wie beim Escapen von Urlzeichen (z.B. wird das Leerzeichen %20 in ' ' umgewandelt).

MfG Iwan

Alle haben gesagt es geht nicht, dann kam einer der hat das nicht gehört und hat es gemacht.

2.891 Beiträge seit 2004
vor 11 Jahren

HttpUtility.HtmlDecode("\u00E4") gibt dir ein "ä" zurück.
Siehe auch HttpUtility.HtmlDecode-Methode.

EDIT: Geht nicht. Sieht unten.

W
Whinyowea Themenstarter:in
56 Beiträge seit 2009
vor 11 Jahren

Funktioniert leider nicht. 😦

Habe aber nun herrausgefunden warum (denke ich jedenfalls!).
Der Server hat die zeichen nicht so geschrieben wie ich, statt \u00E4
\u00e4. Dadurch das das klein war hat es nicht geklappt.
Ich habe im Internet eine Regex Lösung gefunden (und für kleinbuchstaben angepasst), für meine Zwecke
reicht sie definitiv aus kann aber keinen Erfolg garantieren.

private static string ConvertUnicodeEscapes(string input)
        {
            input = input.Replace(@"\u", "/u");
            return new System.Text.RegularExpressions.Regex("/u([0-9A-Fa-f]{4})").Replace(input, m =>
            {
                int code = int.Parse(m.Groups[1].Value, System.Globalization.NumberStyles.HexNumber);
                return char.ConvertFromUtf32(code).ToString();
            });
        }       

MfG Iwan

Alle haben gesagt es geht nicht, dann kam einer der hat das nicht gehört und hat es gemacht.

J
251 Beiträge seit 2012
vor 11 Jahren

War das Problem nur bei Kleinbuchstaben? Oder gibt es noch mehr?

Wenn es nur Kleinbuchstaben sind, hätt ich einfach die ToUpper()-Methode vom string genommen und denn sollte es eign passen.

16.842 Beiträge seit 2008
vor 11 Jahren

Dein Encoding wird einfach falsch sein. Da Du aber nicht erklärst, was Du tust, kann man Dir auch nicht sonderlich gut helfen.
StreamReader arbeitet standardmäßig hier mit UTF-8; ein webClient.DownloadString() erkennt automatisch das korrekte Encoding, das der Server schließlich mit angibt.

Machst Du was ganz anderes dann musst Du eben aus dem Header des Requests das aktuelle Encoding auslesen und dieses verwenden.

2.891 Beiträge seit 2004
vor 11 Jahren

Funktioniert leider nicht. 😦

Ah, verdammt. Da bin ich voll in die Falle getappt. Da ich einfach "\u00E4" geschrieben habe, hat der C#-Compiler direkt die Unicode-Entsprechung eingesetzt, sodass da dann ein "ä" zurückgegeben wurde - allerdings nicht, weil die HtmlDecode-Methode das korrekt ersetzt hat.
Korrekt hätte ich @"\u00E4" oder "\\u00E4" verwenden müssen.

Sorry.

1.696 Beiträge seit 2006
vor 11 Jahren

Hallo,

wie Abt schon sagte, es geht um deine Einstellung beim Lesen. Was meinst du was die Chinesen, Russen, etc machen? Jedes Zeichen durch die Funktion zur Konvertierung schicken, um das richtige Zeichen zu bekommen? Wohl kaum 😃. Propbiere mal so:


System.Net.HttpWebResponse webResponse = (System.Net.HttpWebResponse)webRequest.GetResponse();
string charset = webResponse.CharacterSet;
Encoding encoding = Encoding.GetEncoding(charset);
using (StreamReader sr = new StreamReader(webResponse.GetResponseStream(), encoding))
{
...
}

Grüße

Ich bin verantwortlich für das, was ich sage, nicht für das, was du verstehst.

**:::