Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu
Online

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

AW: EEncodingError Fehler

  Alt 23. Apr 2014, 22:30
Meinst du nicht, daß die Logik andersrum einfacher ist?
Delphi-Quellcode:
      Ok := False;
      if not Ok then // ich weiß, das IF ist sinnlos, aber was soll's ... ich mag Symetrie und ich mag es nicht, wie die DP Leerzeichen löscht.
        try TempIni := TMemIniFile.Create(TempFile, TEncoding.UTF8); Ok := True; except end;
      if not Ok then
        try TempIni := TMemIniFile.Create(TempFile, TEncoding.ASCII); Ok := True; except end;
      if not Ok then
        try TempIni := TMemIniFile.Create(TempFile, TEncoding.UTF7); Ok := True; except end;
      if not Ok then
        try TempIni := TMemIniFile.Create(TempFile, TEncoding.ANSI); Ok := True; except end;
Wobei du ein Problem haben wirst, denn man kann einige Kodierugen nicht prüfen, bzw. einige Codierungen lassen alle Daten zu, da sie keine "ungültigen" Byte-Kombinationen kennen.

Als Erstes kann man schauen ob die Datei ein Encoding besitzt.
z.B. über TFileStream und TEncoding.GetBufferEncoding

Wenn es ein BOM gibt, dann über die Automatik laden, also ohne Encoding-Parameter, bzw. man besorgt sich einen passenden über TEncoding.GetEncoding .

Ohne BOM kann man nur versuchen sich gegenseitig ausschließende Codierungen nacheinander durchzuprobieren.

Unicode und BEUnicode nehmen alles an, was (zufällig) eine grade Anzahl an Bytes besitzt, aber wenn man Chinesisch als Sprache erlaubt, dann kann man damit auch jedes andere Format einlesen.

UTF-7 ist 7 Bit pro Zeichen, was zufällig der Spezifikation von von ASCII entspricht, auch als ANSI kann man es problemlos laden und mit UTF-8 geht es auch.
Alles mit 7 Bit lässt sich mit UTF-8 Laden, da das UTF-8 erst am 8. Bit erkennen kann, daß es kein UTF-8 ist.

usw.



Aber ja, hier hat man den Vorteil das eventuell aus dem HTTP-Header rauszubekommen.
Bei einigen Protokollen kann der Client sagen, was er gern haben möchte. (die möglichen Encodings, die unterstützten Komprimierungen, bestimmte Dateiformate, ...)
Und der Server "kann" umgekehrt auch sagen was er letztendlich ausgeliefert hat. (DatenFormat, Datenmenge, ...)
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.

Geändert von himitsu (23. Apr 2014 um 22:35 Uhr)
  Mit Zitat antworten Zitat