Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi UTF(Encode codiert nicht richtig (https://www.delphipraxis.net/180658-utf-encode-codiert-nicht-richtig.html)

Codehunter 5. Jun 2014 15:20

Delphi-Version: XE4

UTF(Encode codiert nicht richtig
 
Hi!

Scheinbar codiert UTF8Encode bei XE4 nicht richtig. Hier erstmal mein Code (die kyrillischen Zeichen sind zufäälig gewählt):
Delphi-Quellcode:
var
  S: RawByteString;
  SU: UnicodeString;
begin
  SU:= 'апрвулв';
  S:= UTF8Encode(SU);
  SetCodePage(S, 0, FALSE);
  SU:= S;
Dabei kommt der folgende UTF8-String heraus:
Code:
апÑ?вÑ?лв
Wenn ich den rein testweise mal durch dieses Tool konvertieren lasse, sieht man dass zwar einige aber eben nicht alle Zeichen richtig decodiert werden können. Ein Bug auf der verlinkten Seite ist es nicht, da kann man jeden anderen Decoder mit dem selben Ergebnis testen.

Wo liegt da jetzt der Fehler?

Grüße
Cody

himitsu 5. Jun 2014 15:44

AW: UTF(Encode codiert nicht richtig
 
Liste der Anhänge anzeigen (Anzahl: 1)
Code:
апÑ?вÑ?лв  < dein Programm/Post
апрвулв    < die Webseite
[edit]
vor dem Posten, waren die Zeichen € und ƒ noch nicht sichtbar und wurden erst durch die DP dahingehend umgewandelt.
Also k.A. welche Zeichen das jetzt wirklich sind.
Anhang 41301
[/edit]

? = vermutlich kann das Zeichen nicht für die Anzeige umcodiert werden, drum macht Delphi da ein "?" draus, während die Webseite das Zeichen einfach weglässt.

Zitat:

Delphi-Quellcode:
//SetCodePage(S, 0, FALSE);
SetCodePage(S, CP_ACP, FALSE);

Du sagst dort das sei ANSI und bei Zuweisung an den Unicodestring wird das von ANSI in Unicode umcodiert, was dir natürlich den UTF-8-Code zerschrottet.

Wenn auf der Webseite nun auch wieder von Unicode in die selbe ANSI-Codepage umcodiert würde, dann könnte es allerdings passen.

An dem ¿ und » hättes man eigentlich erkennen können, daß es sich hierbei nicht mehr um die Zeichencodes, im Unicodebereich von 0 bis 255 handelt.
Delphi-Quellcode:
SetCodePage(S, $FFFF, FALSE); // $ffff=Raw
Aber es kommt halt auch noch darauf an, ob und welche Umcodierung dein Webbrowser und deren En-/Decoding-Funktion besitzt.

Codehunter 10. Jun 2014 13:01

AW: UTF(Encode codiert nicht richtig
 
Manchmal wünschte ich, seit Konrad Zuse wären alle Rechner immer mit Unicode gelaufen. Dann wär nie einer auf die Idee gekommen, so ein Binärchaos zu veranstalten ;-)

In meinem Fall war die Ursache allen Ärgers was ganz Banales: Eine Komponente war von mir in der IDE auf einen UTF8-Header eingestellt, hat aber irgendwo auf dem Weg zur Textausgabe den Header einfach auf einen Leerstring gestellt. Folglich bekam der Client vom Server eine Antwort die nicht explizit als UTF8 gekennzeichnet war und fiel sicherheitshalber auf ANSI zurück :evil:


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:17 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz