![]() |
Delphi-Version: 2010
Encoding (ASCII/UTF-8/xxx) richtig erkennen
Hi.
Ich weiß, dass die 100% Erkennung einer Datei bzgl. ihres Formates nicht so einfach ist: ![]() Gibt es dazu bereits für Delphi eine entsprechende Implementation, die dieses Algorithmus (oder vergleichbares) verwendet, um herauszufinden, ob eine Datei z.B. im Unicode-Format vorliegt? Auf ein BOM kann man sich ja nicht verlassen... Danke & lG, Marc |
AW: Encoding (ASCII/UTF-8/xxx) richtig erkennen
Zitat:
Es ist eigentlich unmöglich Unicode-Char(full 2Byte, eg. 2. Byte <> 0) mit diversenen !Ansi!-Sequencen auseinander zu halten. Ich habe mich damit auch herum ärgern müssen doch irgendetwas 100% sicheres -> NOPE. Was sicher funzte sind Sachen wie StrLen() (wenn du ein #0 an den Stream angehängt hast), welches schon bei den ersten Unicode-Chars eine andere Länge als Stream.Size zurück gibt(knallt aber bei RTF-formatierten Daten). Dann wäre da noch sowas wie: NotUnicode = (Stream.Size mod 2 <> 0) oder so. Und zu guter letzt: DetectUTF8Encoding in [etASCII,etUTF8] welches ziehmlich sicher wäre. Alles andere ist das Befragen der Kristallkugel, IMHO. |
AW: Encoding (ASCII/UTF-8/xxx) richtig erkennen
Also es gibt da schon was Besseres, aber eben keine 100% Trefferquote (aus diversen Gründen):
![]() Hier ist eben Wissen Macht, bzw. es sollte dem Anwender die Möglichkeit gegeben werden, die CodePage zu wählen/wechseln (inkl. einer Live-Vorschau). Wenn es dann so aussieht wie erwartet, dann kann er ja weitermachen. |
AW: Encoding (ASCII/UTF-8/xxx) richtig erkennen
Zitat:
Zitat:
|
AW: Encoding (ASCII/UTF-8/xxx) richtig erkennen
Wenn der ganze Text vorliegt sollte es eigentlich möglich sein.
Wenn die Anzahl der x00-Bytes etwa die Hälfte aller Bytes ist, sollte es sich um 16-Bit Code handeln. Gibt es eine rel. hohe Anzahl von xC2-Bytes sollte es sich um UTF8-Kodierung handeln. Das gilt allerdings nur für einen Europäischen Text. Gruß K-H |
AW: Encoding (ASCII/UTF-8/xxx) richtig erkennen
@Uwe,
so ist es. Die fertigen Klassen, oder deren Wissen, stoßen auch hier auf seine Grenzen. @Sir Rufo, mag sein, daß da mehr Erfahrung ins Spiel kommt, grundsätzlich jedoch tested Emba auf BOM, da bin ich ja schon einige Schritte oder Ideen weiter. Wenn du jedoch eine Automatisierung einbauen willst(wovon ich ausgehe, daß der TE das vor hat), wirst du doch deinen Usern nicht zumuten, irgenwelche Lesbarkeits-Tests, wie "Schauts noch chinesisch aus? Dann klicke weiter, bis der Augenkrebs verschwunden ist.." zumuten oder?:gruebel: :zwinker: @p80286 UTF8 und ASCII7-Bit lassen sich sich !nahezu! 100%ig erkennen, da sie einer Normung unterliegen. Einzige Ausnahme, welche mir einfallen würden, wäre ein 2Byte-WideChar Folge, welche gerade am Anfang des Streams einen Treffer generieren. Desto länger der gescannte Text, desto sicherer werden die Ergebnisse. Aber grundsätzlich: NEIN es ist unmöglich 100% sicher zu sein. Worst case sind wie gesagt, 2Byte Wide-Chars, wo das 2. Byte <> #0 belegt ist. Hier ist es meiner bescheiden Meinung nach unmöglich eine Ansi(CP <> UTF8/ASCII7)Encodierung mit Unicode auseinander zu halten.. Schaut euch mal die Tabellen auf Unicode.org oder Wikipedia an. Zufalls matches sind eigentlich schon vorprogrammiert. |
AW: Encoding (ASCII/UTF-8/xxx) richtig erkennen
Wenn ich keine 100% Erkennung garantieren kann, dann bekommt der Benutzer die Möglichkeit dort einzugreifen. Das ist besser als irgendwas unkontrolliert in die Verarbeitung zu werfen.
Ja, das TEcoding ist kein Zauberstab ... das Testen auf eine gerade/ungerade Anzahl auch nicht. Ok, man kann es nicht eindeutig feststellen, sondern nur grob schätzen unter Annahme eines Kontexts (Land, Ursprung, wie war das letztens, ...). Darum ist die Möglichkeit des manuellen Eingriffs zwingend notwendig. |
AW: Encoding (ASCII/UTF-8/xxx) richtig erkennen
Ist richtig und auch Fazit meiner Ausführungen...
Grundsätzlich bleibt wirklich nichts anderes übrig, als eben dieses dem Enduser zuzumuten. Schwieriger wirds aber, wenn sich die Ansi-Encodierungen auch noch anfangen teilweise überschneiden und im erst Kapitel 20, Abstatz 5 endlich mal ein eindeutig unlesbares Ergebnis ergibt. :stupid: Der TE jedoch stellt den BOM als unzuverlässig dar, somit wollte ich ihm die Augen öffnen, was da seine Optionen sind... eigentlich nur Mumpiz. Mehr fällt mir da jedoch nicht ein. Wäre aber ebenfalls dankbar, wenn da jemand mehr "Sachverstand" als Emba.TEncoding hat und mich eines besseren belehrt.. |
AW: Encoding (ASCII/UTF-8/xxx) richtig erkennen
|
AW: Encoding (ASCII/UTF-8/xxx) richtig erkennen
Zitat:
Zitat:
Gruß K-H |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:06 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