Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Codierung (ANSI, UTF-8) einer Textdatei ermitteln (https://www.delphipraxis.net/109951-codierung-ansi-utf-8-einer-textdatei-ermitteln.html)

Blitzwunder 10. Mär 2008 15:37


Codierung (ANSI, UTF-8) einer Textdatei ermitteln
 
Hallo,

ich habe eine slowakische Textdatei, die in UTF-8 codiert ist, meine Standard-Textfiles sind aber ANSI codiert.
Wie finde ich nun mit DELPHI heraus, welche Codierung verwendet wurde?
Ich will beide Format in meiner Applikation einlesen und anzeigen können.

Gruß
blitzwunder

Bernhard Geyer 10. Mär 2008 15:39

Re: Codierung (ANSI, UTF-8) einer Textdatei ermitteln
 
über den BOM-Header der Datei.

Am einfachsten ist es aber Unicode-Fähige Controls wie das Elpack oder die TNTWare-Komponenten zu verwenden. Diese bieten eigentlich schon fertige Leseroutinen an.

AFAIK müsste irgendwo im Forum (Codelib?) auch ein fertiger Code zum erkennen der Codierung einer Textdatei vorhanden sein.

BUG 10. Mär 2008 16:47

Re: Codierung (ANSI, UTF-8) einer Textdatei ermitteln
 
Ich mach mal ein bisschen Werbung: Unicode-Bibliothek/Konverter :mrgreen:

Zitat:

Zitat von Bernhard Geyer
über den BOM-Header der Datei.
ein fertiger Code zum erkennen der Codierung einer Textdatei

Vielleicht kannst du es gebrauchen, insbesondere die Prozedur "detectBOM".

Zitat:

Zitat von Bernhard Geyer
Am einfachsten ist es aber Unicode-Fähige Controls wie das Elpack oder die TNTWare-Komponenten zu verwenden. Diese bieten eigentlich schon fertige Leseroutinen an.

Das ist wahrscheinlich die bessere Lösung.

MfG,
Bug

x000x 7. Nov 2011 11:10

AW: Re: Codierung (ANSI, UTF-8) einer Textdatei ermitteln
 
Zitat:

Zitat von Bernhard Geyer (Beitrag 748711)
über den BOM-Header der Datei.

Hallo Bernhard,
wenn die Datei aber kein BOM hat?

Irgendwo im Forum habe ich gelesen, dass dann nur raten möglich wäre.
Hat jemand eventuell schon eine Funktion dafür?

VG Peter

himitsu 7. Nov 2011 11:17

AW: Re: Codierung (ANSI, UTF-8) einer Textdatei ermitteln
 
Nee, da es nicht möglich ist, eine allgemein gültige Funktion zu schreiben, da jeder andere Ergebnisse der Ratefunktion erwarten würde/könnte und man es keinem Recht machen könnte.

Die einzige wirkliche Lösung wäre, wenn man die Datei, bzw. einen Sream versucht mit allen bekanten Textkodierungen zu dekodieren, das was dabei rauskommt durch eine Sprachanalyse jagt, welche alle nötigen Sprechen beherscht und sich dann die wahrscheinlichste der erfolgreichen Lösungen rauspickt.

Und das ist einfach zu aufwändig.

Bernhard Geyer 7. Nov 2011 11:18

AW: Re: Codierung (ANSI, UTF-8) einer Textdatei ermitteln
 
Zitat:

Zitat von x000x (Beitrag 1134798)
Zitat:

Zitat von Bernhard Geyer (Beitrag 748711)
über den BOM-Header der Datei.

Hallo Bernhard,
wenn die Datei aber kein BOM hat?

Irgendwo im Forum habe ich gelesen, dass dann nur raten möglich wäre.

Raten mit entsprechenden Fehlerquote. Raten würde über Wahrscheinlichkeiten gehen mit entsprechenden falschwahl.


Erste stufe wäre nach $00-Werten zu suchen. Dann hätte man schon mal mit hoher Wahrscheinlichkeit UTF-16 vor sich.
Dnn schauen ob es gerade oder ungerade Werte sind -> Big-Endian-Erkendung.

Und falls keine $00 -> Ansi (oder mit sehr geringer Wahrscheinlichkeit z.B. ein rein chinesicher Text). Und wenn du hier noch die Codepage erkennen willst heißt es sprachanalyse: Welche Sprache hat welche Zeichen mit welcher Wahrscheinlichkeit hintereinander.

mkinzler 7. Nov 2011 11:19

AW: Codierung (ANSI, UTF-8) einer Textdatei ermitteln
 
Dann könnte man ggf. per Wörterbuchsuche schauen, ob etwas sinnvolles in der datei steht.
Auf jeden Fall ist Raten eine schlechte Methode.

Luckie 7. Nov 2011 12:25

AW: Codierung (ANSI, UTF-8) einer Textdatei ermitteln
 
http://blogs.msdn.com/b/oldnewthing/.../24/95235.aspx und
http://blogs.msdn.com/b/oldnewthing/...7/2158334.aspx

ConnorMcLeod 7. Nov 2011 14:36

AW: Codierung (ANSI, UTF-8) einer Textdatei ermitteln
 
ich weiss nicht mehr, wo diese Idee her ist; mglw von Himitsu:
Delphi-Quellcode:
var
  sData      : TFileStream;
  sInhalt    : WideString;
  nBytes     : int64;
  Buffer     : TBytes;
  Encoding   : TEncoding;
begin
  sData    := TFileStream.Create(AFileName, fmOpenRead);
  try
    sData.Seek(0, soFromBeginning);
    nBytes := sData.Size - sData.Position;
    SetLength(Buffer, nBytes);
    Encoding := nil;
    sData.Read(Buffer[0], nBytes);
    nBytes  := TEncoding.GetBufferEncoding(Buffer, Encoding);
    sInhalt := Encoding.GetString(Buffer, nBytes, Length(Buffer)-nBytes);
Ist daran etwas nicht gut?

Gausi 7. Nov 2011 14:50

AW: Codierung (ANSI, UTF-8) einer Textdatei ermitteln
 
Wenn ich mir den Code von GetBufferEncoding unter Delphi 2009 so anschaue, wird da einfach nur ein passendes BOM gesucht. Also das, was ab 2009 Delphi auch automatisch macht, z.B. bei TStringList.LoadFromFile. Wenn man damit arbeitet, sollten unterschiedliche codierte Textdateien kein Problem sein (wenn ein BOM vorhanden ist, sonst wird das schwieriger ;)).

Die Heuristik zur Erkennung bei Notepad ist imho aber auch besser geworden. Zumindest kann man unter Windows 7 jetzt "Blödsinn" damit schreiben. :stupid:


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:52 Uhr.
Seite 1 von 2  1 2      

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