![]() |
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 |
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. |
Re: Codierung (ANSI, UTF-8) einer Textdatei ermitteln
Ich mach mal ein bisschen Werbung:
![]() Zitat:
Zitat:
MfG, Bug |
AW: Re: Codierung (ANSI, UTF-8) einer Textdatei ermitteln
Zitat:
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 |
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. |
AW: Re: Codierung (ANSI, UTF-8) einer Textdatei ermitteln
Zitat:
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. |
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. |
AW: Codierung (ANSI, UTF-8) einer Textdatei ermitteln
|
AW: Codierung (ANSI, UTF-8) einer Textdatei ermitteln
ich weiss nicht mehr, wo diese Idee her ist; mglw von Himitsu:
Delphi-Quellcode:
Ist daran etwas nicht gut?
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); |
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 23:10 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