AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

EEncodingError Fehler

Ein Thema von greenmile · begonnen am 21. Apr 2014 · letzter Beitrag vom 26. Mai 2014
Antwort Antwort
Benutzerbild von himitsu
himitsu

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

AW: EEncodingError Fehler

  Alt 23. Apr 2014, 21: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, ...)
Ein Therapeut entspricht 1024 Gigapeut.

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

Registriert seit: 17. Apr 2003
1.107 Beiträge
 
Delphi 10.3 Rio
 
#2

AW: EEncodingError Fehler

  Alt 24. Apr 2014, 08:47
So, Sch..e voll, mache es jetzt anders:

Code:
TempListDL := TStringlist.Create;
TempListDL.Text := IdHTTP1.Get(URL);
TempListDL.SaveToFile(TempFile);
Dann läuft's auch ...
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: EEncodingError Fehler

  Alt 24. Apr 2014, 10:40
Vergiss das TempListDL.Free nicht, sonst läuft das auch noch voll.

TFile.WriteAllText(TempFile, IdHTTP1.Get(URL)); (System.IOUtils)
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu (24. Apr 2014 um 10:42 Uhr)
  Mit Zitat antworten Zitat
Matthias

Registriert seit: 16. Feb 2006
14 Beiträge
 
Delphi 12 Athens
 
#4

AW: EEncodingError Fehler

  Alt 15. Mai 2014, 21:42
Tritt dieser Fehler aus der IDE heraus auf und wenn ja, nutzt Du als IDE Language "Deutsch"?

Bei mir wird diese Meldung 'Keine Zuordnung für Unicode-Zeichen in der Multibyte-Zielcodeseite vorhanden' in xe6 (nicht in xe4 und xe5) im Zusammenhang mit dem Korzh Localizer ausgegeben, wenn ich versuche die Language Files aus der IDE heraus zu aktualisieren. Stelle ich mit Hilfe von BDSSetLang die Sprache der "IDE-Benutzeroberfläche" auf Englisch, dann wird diese Meldung nicht ausgegeben und alles funktioniert wie erwartet.
Matthias Wiese
  Mit Zitat antworten Zitat
greenmile

Registriert seit: 17. Apr 2003
1.107 Beiträge
 
Delphi 10.3 Rio
 
#5

AW: EEncodingError Fehler

  Alt 26. Mai 2014, 17:17
Super, jetzt bekomme ich diese nervige Meldung auch dem Android Handy.
Habe es da jetzt so (gepfuscht) gelöst:

function strFileLoad(const aFile: String): String;
var Err: Boolean;
var
aStr : TStrings;
begin
Result:='';
aStr:=TStringList.Create;
try
Err := false;
Try aStr.LoadFromFile(aFile, TEncoding.Ansi); Err := false; Except Err := true; End;
If Err then Try aStr.LoadFromFile(aFile, TEncoding.Default); Err := false; Except Err := true; End;
If Err then Try aStr.LoadFromFile(aFile, TEncoding.Ascii); Err := false; Except Err := true; End;
If Err then Try aStr.LoadFromFile(aFile, TEncoding.UTF8); Err := false; Except Err := true; End;
Result:=aStr.Text;
finally
aStr.Free;
end;
end;

Geändert von greenmile (27. Mai 2014 um 07:03 Uhr)
  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 12:33 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