![]() |
AW: UTF8 Literale leserlich machen. Welche Unit / Funktion?
Also bei mir kommt so ein Krempel über SOAP rein. Das wird dann hiermit bereinigt und übersetzt:
Delphi-Quellcode:
Und das wars dann schon. Ein paar sinnvolle trys und Frees bitte ergänzen.
uses System.JSON;
var myJSONValue:TJSONValue; // 'Gl\xC7\, cknerin' -> 'Glöcknerin' temp := StringReplace(temp, '\ ', ' ', []); temp := StringReplace(temp, '\n', ' ', []); temp := StringReplace(temp, '\, ', '', []); myJSONValue := TJSONObject.ParseJSONValue(StringReplace(temp.QuotedString('"'), '\x', '\u00', [rfReplaceAll])); if Assigned(myJSONValue) then temp := myJSONValue.ToString; temp := StringReplace(temp, '"', '', [rfReplaceAll]); Sherlock |
AW: UTF8 Literale leserlich machen. Welche Unit / Funktion?
So, ich möchte dann bitte auch nochmal (nur so wegen der Vielfalt):
Delphi-Quellcode:
uses
System.SysUtils, System.Classes; function DecodeCStyleString(const AStr: String): String; const cLeadIn: TBytes = [$5C, $78]; // '\x' var cnt: Integer; source: TBytes; target: TBytes; i: Integer; begin source := TEncoding.UTF8.GetBytes(AStr); SetLength(target, Length(source)); // ausreichend Platz schaffen cnt := 0; i := 0; while (i < Length(source)) do begin if ((i + 3) < Length(source)) and CompareMem(@source[I], @cLeadIn[0], 2) and (HexToBin(source, I + 2, target, cnt, 1) = 1) then begin Inc(cnt); Inc(i, 4); Continue; end; target[cnt] := source[i]; inc(cnt); Inc(i); end; Result := TEncoding.UTF8.GetString(target, 0, cnt); end; |
AW: UTF8 Literale leserlich machen. Welche Unit / Funktion?
@UweRaabe
Ich weiß nicht warum, aber mit dem Code bekomme ich bei Delphi 10.3.2 nur Fehler
Code:
Zeile 14 ist die mit der
[dcc32 Fehler] Coding.dpr(14): E2029 ')' erwartet, aber ',' gefunden
[dcc32 Fehler] Coding.dpr(28): E2008 Inkompatible Typen [dcc32 Fehler] Coding.dpr(29): E2015 Operator ist auf diesen Operandentyp nicht anwendbar
Delphi-Quellcode:
.
cLeadIn: TBytes = ($5C, $78); // '\x'
|
AW: UTF8 Literale leserlich machen. Welche Unit / Funktion?
Also was hier IMHO einer Erleuchtung im Wege steht ist der Mangel an zusätzlichen Informationen. Woher kommt der String, was für ein System, ggf. Quell- und Zielcodepages usw. Ein \xc4 und \x80 sagt ja erstmal nichts weiter aus als den Bytewert 196 und 128. Ohne Kenntnis der Codepage kommt man damit nicht weit.
128 lässt sich nach Windows-1251, Windows-1252 und ISO-8859-1 als "€" auflösen, 196 nach ISO-8859-1 als "Ä". Nach CP437 und CP850 kämen dann "├" und "Ç" raus. In Windows-1250 hättest du "Д" und "Ђ". Und so weiter. Heißt: Um das richtig nach Unicode übersetzen zu können brauchst du die Information, welche 8-Bit-Codepage der Text hatte, BEVOR er in UTF-8 konvertiert wurde. |
AW: UTF8 Literale leserlich machen. Welche Unit / Funktion?
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:35 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz