![]() |
Kaputte Datei ohne Encoding mit Umlauten in StringList laden+Zeichen erhalten
Spoiler: die Daten wären verloren :lol:
Ich komme bei einem Problem nicht weiter. Ich lade mit TFile und TEncoding.UTF8 eine Datei in eine StringList. Ich möchte es jedenfalls. Aber meine Datei scheint kaputt zu sein. Die Datei ist laut Notepad++ ohne Encoding. Laut Sublime Western (Windows 1252). Die Datei hat vor dem Speichern den Inhalt Zitat:
Zitat:
Ich habe vorerst eine Behandlung eingebaut die auf TEncoding.Default zurückgreift, wenn das Laden in meiner eigenen TFile mit UTF8 fehlschlägt. So bekomme ich ebenfalls das Sublime Ergebnis. Kann man das schöner behandeln?
Delphi-Quellcode:
try
Result := TFile.ReadAllText(Path, TEncoding.UTF8); except Result := TFile.ReadAllText(Path, TEncoding.Default); end; |
AW: Kaputte Datei ohne Encoding mit Umlauten in StringList laden+Zeichen erhalten
Wenn die Datei Utf-8 ist, aber halt keine BOM hat, versuch mal eine Instanz dieses encodings:
Delphi-Quellcode:
type
{! <summary> UTF8 encoding class without BOM, can be used to write files in UTF8 encoding without a BOM, e.g. XML or XHTML files. </summary>} TNoBomUTF8Encoding = class(TUTF8Encoding) public {! <summary> Return a zero-elements array to use as a BOM. </summary>} function GetPreamble: System.TArray<System.Byte>; override; end; function TNoBomUTF8Encoding.GetPreamble: System.TArray<System.Byte>; begin SetLength(Result,0); end; |
AW: Kaputte Datei ohne Encoding mit Umlauten in StringList laden+Zeichen erhalten
Die Datei ist nicht UTF-8. Sie ist Western Windows 1252.
|
AW: Kaputte Datei ohne Encoding mit Umlauten in StringList laden+Zeichen erhalten
Zitat:
Im ersten Post schreibst du, dass Zitat:
Also: Ist deine Angabe zum Encoding nun eine gesicherte Information vom Ersteller der Datei oder eben diese geschätzte Annahme von Sublime (der trotz dieser Annahme die Datei nicht richtig darstellen kann). BTW: Jede Textdatei hat ein Encoding. Ohne Encoding ist es keine Textdatei, sondern nur ein Haufen Bytes. Wenn Notepad++ kein Encoding angibt, dann heißt das nicht, es gibt dort kein Encoding, sondern die verwendeten Prüfverfahren von Notepad++ konnten kein Encoding aus der Datei herauslesen. |
AW: Kaputte Datei ohne Encoding mit Umlauten in StringList laden+Zeichen erhalten
Leider weiß ich nicht wie diese Datei erzeugt wurde.
Ich habe nur noch ein seltenes Exemplar davon auf meinem Computer. Zitat:
Soll ich die Datei mal hier hochladen? Sie ist 5 Bytes groß (3 Zeichen, 2 Leerstellen), offensichtlich kein Multibyte. |
AW: Kaputte Datei ohne Encoding mit Umlauten in StringList laden+Zeichen erhalten
Die brauchst du nicht hochladen, sondern diese 5 Bytes kannst du auch als Hex-Zeichenfolge hier direkt posten.
Gibt es einen Hinweis, was für eine Information diese 5 Bytes beinhalten sollen? Denn bei 5 Zeichen (effektiv 3) ist der Informationsgehalt für Text doch recht dürftig |
AW: Kaputte Datei ohne Encoding mit Umlauten in StringList laden+Zeichen erhalten
Das ist eine Datei mit freiem, zuzfälligem Testinhalt.
Egal was drin stünde, die Daten wären verloren zwecks fehlendem Encoding. Das ist mir jetzt klar. Zitat:
Gilt hier als Notlösung so eine Datei einfach mit TEncoding.Default zu laden? |
AW: Kaputte Datei ohne Encoding mit Umlauten in StringList laden+Zeichen erhalten
Zitat:
Das gleiche Problem hast du mit einer PNG-Datei (dir so nicht bewusst) und du das pauschal eben dann einfach als BMP öffnest. Dort gibt es auch nur Murks (bzw. da wirst du eine Fehlermeldung bekommen). Bei Text gibt es aber keine Fehlermeldungen bei falsch gewähltem Encoding (bzw. sehr selten). Wenn du aber nicht weißt, was diese Datei bedeutet, warum willst du diese dann öffnen/verarbeiten? Das ergibt keinen Sinn. Einen Zettel mit irgendwelchen kryptischen Zeichen drauf ergibt auch keinen Sinn, wenn man keinen Anhaltspunkt hat, was der zu bedeuten hat. Vielleicht nur eine Schriftprobe? |
AW: Kaputte Datei ohne Encoding mit Umlauten in StringList laden+Zeichen erhalten
3F ist der Hexadezimalwert für das Fragezeichen im ASCII-Zeichensatz, da dürfte es (beinahe) egal sein, ob nun "Western Windows 1252" oder sonst irgendwas aus der "ISO 8859-Ecke".
Das Fragezeichen ist ein reguläres Fragezeichen und nicht das Fragezeichen, dass man zuweilen angezeigt bekommt, wenn eine Datei irgendwas enthält, was man mit dem gewählten / erratenen Zeichensatz nicht darstellen kann. |
AW: Kaputte Datei ohne Encoding mit Umlauten in StringList laden+Zeichen erhalten
Das 3F- Fragezeichen entsteht aber wohl schon weiter hinten in der Kette, denn
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:16 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