![]() |
Textdatei Encoding feststellen ohne BOM
Hallo,
wenn eine Textdatei, hier CSV Daten offensichtlich nicht ASCI/ANSI kodiert ist und keine BOM hat, wie stellt man die Kodierung fest?? Mir fällt grad auf, ich weiß nicht mal, ob CSV und BOM zusammen gehören. NOTEPAD bspw. rät ja nicht schlecht bei der Kodierung. Oder gibt es noch andere Kennzeichen? |
AW: Textdatei Encoding festellen ohne BOM
Zitat:
|
AW: Textdatei Encoding festellen ohne BOM
mmh, bei fremden Dateien ist die aktuelle Codepage ja wurscht.
Also noch doller raten? |
AW: Textdatei Encoding festellen ohne BOM
Dann raten wir mal BOM=Bottom of Master?
und als Zeichensatz EBCDIC76? Zeig doch mal einen Auszug, vllt als HexDump? Gruß K-H |
AW: Textdatei Encoding festellen ohne BOM
|
AW: Textdatei Encoding festellen ohne BOM
BOM = Byte Order Mark
Muster kann ich nicht liefern ohne sie zu anonymisieren. Damit wären sie dann aber zerstört bzw. bedeutungslos für die Frage. Ich war eher an generellen Merkmalen der Kodierungen interessiert, also Indizien sozusagen.. Hab den letzten Post übersehen, danke für die Links. |
AW: Textdatei Encoding festellen ohne BOM
Byte Order Mark ... wurde eingeführt, um gewisse Kodierungen sicher erkennen/unterscheiden zu können.
Alles Andere ist nur Gerate und es gibt keinen Code, welche "sicher" festellen kann, in welcher Kodierung ein reiner Text vorliegt. Man kann höchstens verschiedene Kodierungen (Unicode, UTF-8, UTF-7, ASCII, ...) prüfen und sagen "ja, der Text entspricht zumindestens den Regeln dieser Kodierung", aber hierbei kann es bei mehreren Kodierungen "ja" heißen und bezüglich einer ANSI-Codepage kann man überhaupt nicht prüfen, da es da keine unterscheidbaren Merkmale gibt. Bei Unicode und ANSI wird jede "ordentliche" Prüfung fast immer True liefern. :stupid:
Delphi-Quellcode:
PS: Auch wenn eine Prüfung z.B. sagt "ja, das ist UTF-8", dann muß es nicht UTF-8 sein, es kann z.B. auch ANSI sein, welches rein zufällig so aussieht.
function IsAnsi(s: PByte; Len: Integer): Boolean;
begin Result := True; end; function IsAnsi(s: PByte; Len: Integer): Boolean; begin Result := Len mod 2 = 0; end; |
AW: Textdatei Encoding festellen ohne BOM
Das kommt ganz auf die Daten an...
Wenn es sich z.B. um eine deutsche Textdatei handelt könnte man den Inhalt mit einem Wörterbuch vergleichen. Allerdings funktioniert das nur wenn der Text Sonderzeichen enthält. Problem ist, dass es durchaus Texte gibt, die z.B. keine Umlaute enthalten. Da die normalen Buchstaben in allen (gängigen) Codierungen gleich sind, kann die Codierung auch nur erraten werden wenn auch Sonderzeichen vorkommen. Bei genug grossen Dateien kann man auch die Häufigkeitsverteilung der einzelnen Zeichen ermitteln, was Aufschluss über die verwendete Codepage geben könnte. Allerdings ist das wesentlich komplizierter und funktioniert auch nur wenn der Text entsprechende Sonderzeichen enthält. Das beste ist immer noch wenn man weiss was das Encoding ist. XML z.B. deklariert auf welche Art der Inhalt codiert ist, aber das ist ein Luxus den man leider nicht immer hat. |
AW: Textdatei Encoding festellen ohne BOM
Zitat:
Wenn der HexDump an jeder zweiten Stelle eine x00 aufweist, dann handelt es sich wohl um einen 16Bit Code. Wenn es nur manchmal ein paar Ausreißer gibt, dann ist wohl UTF8 dafür verantwortlich. Kann man auf diese Weise das Problem näher eingrenzen? Gruß K-H Edith: Zitat:
|
AW: Textdatei Encoding festellen ohne BOM
Zitat:
Gegenbeispiel (frei geguttenbergt aus Wikipedia): Zitat:
Zitat:
q.e.d |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:11 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