Discussion:
Internet Zeichenkodierung
(zu alt für eine Antwort)
Michael Schuricht
2017-03-21 07:53:07 UTC
Permalink
Hallo NG,

bei einer Übersetzungs-Textabfrage im Internet (HTTP POST) mittels
InternetOpenUrl und InternetReadFile erhalte ich Text im JSON Format zurück.
Ein Pair enthält den übesetzen Text. Bei internationalen Zeichen (Umlaute,
Fremdsprache) habe ich Probleme, diese Zeichen in lesbaren Text anzuzeigen.
Es kommen Zeichenfolgen mit \uxxxx (xxxx=4 Hexzeichen) vor.
Beispiel- Ich erhalte: "Okvirni polo\u00C5\u00BEaj"
Richtig angezeigt wäre: "Okvirni položaj"
Offensichtlich wird das Zeichen ž als \u00C5\u00BE kodiert.

Wie decodiert man sowas in Delphi?
Ich bin für jeden Tipp dankbar.

Gruß Michael
Achim Kalwa
2017-03-21 08:33:07 UTC
Permalink
Post by Michael Schuricht
bei einer Übersetzungs-Textabfrage im Internet (HTTP POST) mittels
InternetOpenUrl und InternetReadFile erhalte ich Text im JSON Format zurück.
Ein Pair enthält den übesetzen Text. Bei internationalen Zeichen (Umlaute,
Fremdsprache) habe ich Probleme, diese Zeichen in lesbaren Text anzuzeigen.
Es kommen Zeichenfolgen mit \uxxxx (xxxx=4 Hexzeichen) vor.
Beispiel- Ich erhalte: "Okvirni polo\u00C5\u00BEaj"
Richtig angezeigt wäre: "Okvirni položaj"
Offensichtlich wird das Zeichen ž als \u00C5\u00BE kodiert.
Sieht ganz start nach UTF-8 aus.
Die beiden Bytes $C5 und $BE stellen das Zeichen
'LATIN SMALL LETTER Z WITH CARON'
dar: http://www.fileformat.info/info/unicode/char/017e/index.htm
Post by Michael Schuricht
Wie decodiert man sowas in Delphi?
Ganz grob:
Im ersten Schritt die \uxxxx isolieren, dann in Zahl wandeln. Die Bytes
in ein Array schreiben und dieses dann als UTF8String interpretieren.

HTH
Achim
Michael Schuricht
2017-03-22 07:22:50 UTC
Permalink
Post by Achim Kalwa
bei einer Übersetzungs-Textabfrage im Internet (HTTP POST) mittels
InternetOpenUrl und InternetReadFile erhalte ich Text im JSON Format
zurück. Ein Pair enthält den übesetzen Text. Bei internationalen
Zeichen (Umlaute, Fremdsprache) habe ich Probleme, diese Zeichen in
lesbaren Text anzuzeigen. Es kommen Zeichenfolgen mit \uxxxx (xxxx=4
Hexzeichen) vor. Beispiel- Ich erhalte: "Okvirni polo\u00C5\u00BEaj"
Richtig angezeigt wäre: "Okvirni položaj"
Offensichtlich wird das Zeichen ž als \u00C5\u00BE kodiert.
Sieht ganz start nach UTF-8 aus.
Die beiden Bytes $C5 und $BE stellen das Zeichen
'LATIN SMALL LETTER Z WITH CARON'
dar: http://www.fileformat.info/info/unicode/char/017e/index.htm
Wie decodiert man sowas in Delphi?
Im ersten Schritt die \uxxxx isolieren, dann in Zahl wandeln. Die Bytes
in ein Array schreiben und dieses dann als UTF8String interpretieren.
HTH
Achim
Hallo Achim
Danke für deine Antwort.
Das hab ich genau so gemacht, allerdings miut Bauchschmerzen
Ist den gegeben, dass nach \u immer vier Hexadezimale Ziffern folgen?
Die ersten beiden Hexziffern müssten immer 0 sein, sonst wir die
resultierende Zahl größer als 255 und past nicht mehr in eine "UTF8 Byte".
Oder wäre es besser auf \u00 zu testen, und nur dann zu wandeln.
Was passiert, wenn im Text wirklich \u00xx dargestellt werden soll?
Micha
Hans-Peter Diettrich
2017-03-25 06:41:50 UTC
Permalink
Post by Achim Kalwa
Post by Michael Schuricht
Wie decodiert man sowas in Delphi?
Im ersten Schritt die \uxxxx isolieren, dann in Zahl wandeln. Die Bytes
in ein Array schreiben und dieses dann als UTF8String interpretieren.
Hmm, wieso UTF-8, woher weiß man das?

Eigentlich kann doch gleich ein ganzes Unicode-Zeichen (codepoint) mit
\u codiert werden.

DoDi

Soeren Muehlbauer
2017-03-21 10:03:07 UTC
Permalink
Hi,
Post by Michael Schuricht
bei einer Übersetzungs-Textabfrage im Internet (HTTP POST) mittels
InternetOpenUrl und InternetReadFile erhalte ich Text im JSON Format zurück.
Ein Pair enthält den übesetzen Text. Bei internationalen Zeichen (Umlaute,
Fremdsprache) habe ich Probleme, diese Zeichen in lesbaren Text anzuzeigen.
Es kommen Zeichenfolgen mit \uxxxx (xxxx=4 Hexzeichen) vor.
Beispiel- Ich erhalte: "Okvirni polo\u00C5\u00BEaj"
Richtig angezeigt wäre: "Okvirni položaj"
Offensichtlich wird das Zeichen ž als \u00C5\u00BE kodiert.
Wie decodiert man sowas in Delphi?
Welche Delphi Version verwendest Du? In neueren Versionen gibt es
System.JSON. Die dort verwendete Unit System.JSON.Readers macht das
bereits für Dich.

VG. Sören
Soeren Muehlbauer
2017-03-21 10:05:42 UTC
Permalink
Hi,
Post by Soeren Muehlbauer
Post by Michael Schuricht
bei einer Übersetzungs-Textabfrage im Internet (HTTP POST) mittels
InternetOpenUrl und InternetReadFile erhalte ich Text im JSON Format zurück.
Ein Pair enthält den übesetzen Text. Bei internationalen Zeichen (Umlaute,
Fremdsprache) habe ich Probleme, diese Zeichen in lesbaren Text anzuzeigen.
Es kommen Zeichenfolgen mit \uxxxx (xxxx=4 Hexzeichen) vor.
Beispiel- Ich erhalte: "Okvirni polo\u00C5\u00BEaj"
Richtig angezeigt wäre: "Okvirni položaj"
Offensichtlich wird das Zeichen ž als \u00C5\u00BE kodiert.
Wie decodiert man sowas in Delphi?
Welche Delphi Version verwendest Du? In neueren Versionen gibt es
System.JSON. Die dort verwendete Unit System.JSON.Readers macht das
bereits für Dich.
Für ältere Delphiversionen (ab 2010 IRC) gibt es DBXJSON. Alternativ
könnte Dir
http://stackoverflow.com/questions/4214704/delphi-xe-ansistrings-with-escaped-combining-diacritical-marks/4216917#4216917
bzw
http://stackoverflow.com/questions/9713491/delphi-decode-json-utf8-escaped-text
helfen.

VG. Sören
Michael Schuricht
2017-03-22 07:22:50 UTC
Permalink
Post by Soeren Muehlbauer
Hi,
Post by Soeren Muehlbauer
Post by Michael Schuricht
bei einer Übersetzungs-Textabfrage im Internet (HTTP POST) mittels
InternetOpenUrl und InternetReadFile erhalte ich Text im JSON Format zurück.
Ein Pair enthält den übesetzen Text. Bei internationalen Zeichen (Umlaute,
Fremdsprache) habe ich Probleme, diese Zeichen in lesbaren Text anzuzeigen.
Es kommen Zeichenfolgen mit \uxxxx (xxxx=4 Hexzeichen) vor.
Beispiel- Ich erhalte: "Okvirni polo\u00C5\u00BEaj"
Richtig angezeigt wäre: "Okvirni položaj"
Offensichtlich wird das Zeichen ž als \u00C5\u00BE kodiert.
Wie decodiert man sowas in Delphi?
Welche Delphi Version verwendest Du? In neueren Versionen gibt es
System.JSON. Die dort verwendete Unit System.JSON.Readers macht das
bereits für Dich.
Für ältere Delphiversionen (ab 2010 IRC) gibt es DBXJSON. Alternativ
könnte Dir
http://stackoverflow.com/questions/4214704/delphi-xe-ansistrings-with-esc
aped-combining-diacritical-marks/4216917#4216917 bzw
http://stackoverflow.com/questions/9713491/delphi-decode-json-utf8-escape
d-text helfen.
VG. Sören
Hallo Sören,
Danke für Deine Antwort.
Ich verwende Delphi XE4.
Dort sind die JSON Objecte bereits implementiert.

Ich habe mir die Links angeschaut.
Der Knackpunkt ist wohl der Aufruf von TEncoding.UTF8.GetBytes.
Allerdings musste ich danach noch utf8ToString aufrufen, damit die Anzeige
richtig ist.

Auf jeden Fall hab nich jetzt Lösungen parat.

Gruß Michael
Lesen Sie weiter auf narkive:
Loading...