Umlaut-Konfusion

Hallo,

von einer Webseite werden mit client.read() Daten geladen wie:

b 98
e 101
w 119
à -61
¶ -74
l 108
k 107
t 116

Links jeweils als char, rechts der Zahlenwert. Was ich nicht verstehe: Was ist das 'ö' für eine Codierung? Gibt es eine elegante Methode, das in ein menschenlesbares ö zurückzuverandeln, und die anderen Umlaute natürlich auch? Oder doch Zeichen für Zeichen?

Gruß Thomas

Ich bin mir jetzt nicht ganz über den Kontext im Klaren .. aber das sieht so aus, als ob du vermutlich ein falsches Encoding der Quelldaten hast .. also irgendeine Mischung aus .. CP850/UNICODE etc. .. vielleicht wirds etwas einfacher zu verstehen, wenn du die Umgebung und den Code mal darlegst.

mfG

Volker

Sorry, aber ich sehe in Deinem Post kein "ö" :expressionless:
Ansonsten sind Umlaute im HTML ganz gern mal wiefolgt codiert: "ü" für ein ü, oder "ö" für ein ö.
Im Normalfall wird die Codierung einer Seite wiefolgt angegeben:

oder.

Wichtig ist in diesem Fall das "charset=", da steht die Codierng dahinter. Wenn es iso-8859-1 (oder iso-8859-15) ist, hast Du gute Chancen, das Du normale Umlaute bekommst. Bei UTF-8 sind Sonderzeichen als 2-Byte Sequenz definiert. Die Eingangs erwähnte HTML-Codierung geht unabhängig von der Codierung aber immer. Du wirst also um einige String-Ersetzungen nicht herum kommen.

Es ist so: Ich lade Wetterdaten mit dem Ethershield von hier:

http://mobil.tagesschau.de/wetter/?identifier=wetter35

Das was mir zurückgeliefert wird sieht so aus wie oben beschrieben. Ich verstehe eben nicht, wie es zu negativen ASCII-Codes kommen kann. Ich habe schon mit verschiedenen HTTP-Requests experimentiert, dabei funktionierte der Abruf dann gar nicht mehr (es wurden keine Daten geliefert).

Jetzt habe ich es mal so gemacht, dass ich einfach ersetze:

à -61 => 'o'
¶ -74 => 'e'

Dann wird aus dem ö ein "oe". Eigentlich das gewünschte Ergebnis, aber die Vorgehensweise erscheint mir wie edv zu Fuß :wink:

Es gibt keine negativen ASCII Zeichen, Du hast aber sicher zum Speichern der Werte ein "singed Value" verwendet. Ist das höchste Bit=1, wird die Zahl als negativ angesehen.
Das Encoding der Seite ist UTF-8, damit werden Sonderzeichen als 2-Byte dargestellt. ASCII sind nämlich eigentlich nur die ersten 127 Zeichen, da früher für die Datenübertragun nur 7 Bits pro Zeichen verwendet wurden.
Die Sonderzeichen bei UTF-8 erkennt man daran, das bei denen das höchste Bit gesetzt ist, daher auch Deine negativen Zahlen.
Ich kenne den Code nicht mit dem Du die Daten einliest, aber wenn Du "byte"-weise liest, würde ich immer schauen ob das aktuell byte > 127 ist, wenn ja, dann das nächste Byte auch gleich lesen und dann in einem switch() { case .. } Block die wichtigsten Zeichen abfangen und dann stattdessen das passenden Sonderzeichen verwenden.

Ja jetzt wird mir das klar, ich lese die Zeichen als char ein, also signed, dann kann das nicht gehen. Heute abend werde ich den code mal ändern. Vielen Dank!