AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Codierung (ANSI, UTF-8) einer Textdatei ermitteln

Codierung (ANSI, UTF-8) einer Textdatei ermitteln

Ein Thema von Blitzwunder · begonnen am 10. Mär 2008 · letzter Beitrag vom 7. Nov 2011
Antwort Antwort
Seite 1 von 2  1 2   
Blitzwunder

Registriert seit: 3. Mai 2007
Ort: Hannover
1 Beiträge
 
#1

Codierung (ANSI, UTF-8) einer Textdatei ermitteln

  Alt 10. Mär 2008, 16:37
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
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.169 Beiträge
 
Delphi 10.4 Sydney
 
#2

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

  Alt 10. Mär 2008, 16:39
ü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.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Benutzerbild von BUG
BUG

Registriert seit: 4. Dez 2003
Ort: Cottbus
2.094 Beiträge
 
#3

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

  Alt 10. Mär 2008, 17:47
Ich mach mal ein bisschen Werbung: Unicode-Bibliothek/Konverter

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 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
Intellekt ist das Verstehen von Wissen. Verstehen ist der wahre Pfad zu Einsicht. Einsicht ist der Schlüssel zu allem.
  Mit Zitat antworten Zitat
Benutzerbild von x000x
x000x

Registriert seit: 21. Jan 2004
Ort: Bei Hamburg
308 Beiträge
 
Delphi XE2 Professional
 
#4

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

  Alt 7. Nov 2011, 12:10
ü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
Peter
-= Gruss Peter =-
-= alias x000x =-
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

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

  Alt 7. Nov 2011, 12:17
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.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.169 Beiträge
 
Delphi 10.4 Sydney
 
#6

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

  Alt 7. Nov 2011, 12:18
ü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.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#7

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

  Alt 7. Nov 2011, 12:19
Dann könnte man ggf. per Wörterbuchsuche schauen, ob etwas sinnvolles in der datei steht.
Auf jeden Fall ist Raten eine schlechte Methode.
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#8

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

  Alt 7. Nov 2011, 13:25
http://blogs.msdn.com/b/oldnewthing/.../24/95235.aspx und
http://blogs.msdn.com/b/oldnewthing/...7/2158334.aspx
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von ConnorMcLeod
ConnorMcLeod

Registriert seit: 13. Okt 2010
Ort: Bayern
490 Beiträge
 
Delphi 10.4 Sydney
 
#9

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

  Alt 7. Nov 2011, 15:36
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?
Nr.1 Delphi-Tool: [F7]
  Mit Zitat antworten Zitat
Benutzerbild von Gausi
Gausi

Registriert seit: 17. Jul 2005
844 Beiträge
 
Delphi 11 Alexandria
 
#10

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

  Alt 7. Nov 2011, 15:50
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.
The angels have the phone box.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2   

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 00:29 Uhr.
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