AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein UTF8Decode gibt kein Resultat zurück
Thema durchsuchen
Ansicht
Themen-Optionen

UTF8Decode gibt kein Resultat zurück

Ein Thema von stalkingwolf · begonnen am 10. Jul 2020 · letzter Beitrag vom 14. Jul 2020
Antwort Antwort
stalkingwolf

Registriert seit: 6. Mai 2011
540 Beiträge
 
#1

UTF8Decode gibt kein Resultat zurück

  Alt 10. Jul 2020, 10:06
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.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.062 Beiträge
 
Delphi 12 Athens
 
#2

AW: UTF8Decode gibt kein Resultat zurück

  Alt 10. Jul 2020, 10:20
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:
S := UTF8Decode(A);
if (S = '') and (A <> '') then
  raise Eception.Create('ungültiges UTF-8'); //raise EEncodingError.CreateRes(@SInvalidSourceArray); aus System.SysConst
Bei TEncoding.UTF8.GetString wird dagegen direkt eine Exception ausgelöst.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.

Geändert von himitsu (10. Jul 2020 um 10:33 Uhr)
  Mit Zitat antworten Zitat
stalkingwolf

Registriert seit: 6. Mai 2011
540 Beiträge
 
#3

AW: UTF8Decode gibt kein Resultat zurück

  Alt 10. Jul 2020, 10:46
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.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.062 Beiträge
 
Delphi 12 Athens
 
#4

AW: UTF8Decode gibt kein Resultat zurück

  Alt 10. Jul 2020, 11:19
Na das ginge och.

Freu dich drauf, wenn es bald wieder zurückgestellt wird.
Und dann nächstes Jahr auf COVID 20.

Delphi-Quellcode:
try
  S := TEncoding.UTF8.GetString(B);
except
  S := TEncoding.ANSI.GetString(B); // oder lieber mit ASCII
end;
Bei uns geht das mit dem ANSI, kommt dann auf's gleiche Ergebnis, wie beim 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.
Delphi-Quellcode:
try
  S := TEncoding.UTF8.GetString(B);
except
  try
    S := TEncoding.ANSI.GetString(B);
  except
    S := TEncoding.ASCII.GetString(B);
  end;
end;
B = TBytes von Indy, Delphi-Referenz durchsuchenTFile, oder aus'm COM-Port
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
Rolf Frei

Registriert seit: 19. Jun 2006
647 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: UTF8Decode gibt kein Resultat zurück

  Alt 10. Jul 2020, 13:45
Gibt übrigens auch noch eine Funktion IsUTF8String (System.WideStrUtils.pas), die hier genutzt werden könnte.
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.691 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: UTF8Decode gibt kein Resultat zurück

  Alt 10. Jul 2020, 14:02
//offtopic
nächstes Jahr auf COVID 20
Oje, ich hoffe ja immer auf bessere zeiten, das gehört nicht dazu.
Gruß vom KodeZwerg
  Mit Zitat antworten Zitat
stalkingwolf

Registriert seit: 6. Mai 2011
540 Beiträge
 
#7

AW: UTF8Decode gibt kein Resultat zurück

  Alt 14. Jul 2020, 08:38
Na das ginge och.
Freu dich drauf, wenn es bald wieder zurückgestellt wird.
Ich hoffe wir haben dafür nun schon alles berücksichtigt. Aber der Teufel ist ein Eichhörnchen.

Und dann nächstes Jahr auf COVID 20.
Hoffen wir das Beste in Deutschland.

Ich weiß auch warum scheinbar einige Sachen nicht in UTF8 waren. Diese wurden per Hand mit SQL Insert in die Datenbank geschrieben per Flamerobin
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:31 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