![]() |
UTF8Decode gibt kein Resultat zurück
Moin,
ich hab ein etwas nerviges Problem. Wir erhalten durch JSON von Android Tablets Daten und speichern die in unsere Firebirddatenbank Win1552 Zeichensatz. Von einigen erhalte ich z.b Stück von anderen Stück. Jage ich das durch UTF8Decode wird Stück -> Stück, aber die korrekten Strings werden leer von UT8Decode zurückgegeben. a) warum ? b) wie fange ich das ab? Laut unserem Kunden bei dem dies aufgetreten ist meint das alle Tablets das gleiche Modell und die gleiche Android Version hat. Beide gehen auf das gleiche PHP Script zu welchem die Daten per JSON übergeben werden. Edit : Die APP ist in FireMonkey mit Delphi 10.2 entwickelt. Das Windows Programm was die Daten auswertet ist mit Delphi 6 entwickelt. |
AW: UTF8Decode gibt kein Resultat zurück
Wenn da kein gültiges UTF-8 im String drin ist, dann wird wortlos '' zurückgegeben.
Fazit: Bei dir ist da kein UTF-8 drin, sondern irgendwas anderes aus der ANSI-Welt. Schau dir mal an was da an Zeichen über #127 vorhanden ist. Lösung:
Delphi-Quellcode:
Bei TEncoding.UTF8.GetString wird dagegen direkt eine Exception ausgelöst.
S := UTF8Decode(A);
if (S = '') and (A <> '') then raise Eception.Create('ungültiges UTF-8'); //raise EEncodingError.CreateRes(@SInvalidSourceArray); aus System.SysConst |
AW: UTF8Decode gibt kein Resultat zurück
Ok die Lösung mit
if (S = '') and (A <> '') then s:=a; wäre dann bei mir sinnvoll. Ne Exception brauch ich nicht. Eigentlich war die Lösung logisch, hab Brain Lag wegen 2 Wochen MWST Umstellung. Sinnloseste ABM aller Zeiten. |
AW: UTF8Decode gibt kein Resultat zurück
Na das ginge och.
Freu dich drauf, wenn es bald wieder zurückgestellt wird. Und dann nächstes Jahr auf COVID 20.
Delphi-Quellcode:
Bei uns geht das mit dem ANSI, kommt dann auf's gleiche Ergebnis, wie beim
try
S := TEncoding.UTF8.GetString(B); except S := TEncoding.ANSI.GetString(B); // oder lieber mit ASCII end;
Delphi-Quellcode:
.
if (S = '') and (A <> '') then S := A;
Aber ich weiß nicht wie sich z.B. die asiatischen ANSI-CodePages verhalten, drum sah es bei mir zum Schluss so aus. :freak:
Delphi-Quellcode:
B = TBytes von Indy,
try
S := TEncoding.UTF8.GetString(B); except try S := TEncoding.ANSI.GetString(B); except S := TEncoding.ASCII.GetString(B); end; end; ![]() |
AW: UTF8Decode gibt kein Resultat zurück
Gibt übrigens auch noch eine Funktion IsUTF8String (System.WideStrUtils.pas), die hier genutzt werden könnte.
|
AW: UTF8Decode gibt kein Resultat zurück
//offtopic
Zitat:
|
AW: UTF8Decode gibt kein Resultat zurück
Zitat:
Zitat:
Ich weiß auch warum scheinbar einige Sachen nicht in UTF8 waren. Diese wurden per Hand mit SQL Insert in die Datenbank geschrieben per Flamerobin :lol: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:59 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 by Thomas Breitkreuz