2011-06-24 08:07:02 +0000 2011-06-24 08:07:02 +0000
74
74

Wie wird die Kodierung von Textdateien automatisch erkannt?

Es gibt viele einfache Textdateien, die in verschiedenen Zeichensätzen kodiert wurden.

Ich möchte sie alle nach UTF-8 konvertieren, aber bevor ich iconv ausführe, muss ich ihre ursprüngliche Kodierung kennen. Die meisten Browser haben eine Auto Detect Option in den Kodierungen, aber ich kann diese Textdateien nicht einzeln überprüfen, weil es zu viele sind.

Nur wenn ich die ursprüngliche Kodierung kenne, kann ich die Texte mit iconv -f DETECTED_CHARSET -t utf-8 konvertieren.

Gibt es ein Dienstprogramm, um die Kodierung von Textdateien zu erkennen? Es muss NICHT 100% perfekt sein, es macht mir nichts aus, wenn in 1.000.000 Dateien 100 Dateien falsch konvertiert sind.

Antworten (9)

62
62
62
2011-06-24 08:37:06 +0000

Versuchen Sie das Python-Modul chardet , das auf PyPi verfügbar ist:

pip install chardet

Dann führen Sie chardetect myfile.txt aus.

Chardet basiert auf dem von Mozilla verwendeten Erkennungscode , sollte also vernünftige Ergebnisse liefern, vorausgesetzt, der Eingabetext ist lang genug für eine statistische Analyse. Lesen Sie bitte die Projektdokumentation .

Wie in den Kommentaren erwähnt, ist es ziemlich langsam, aber einige Distributionen liefern auch die originale C++-Version aus, wie @Xavier in https://superuser.com/a/609056 gefunden hat. Es gibt auch irgendwo eine Java-Version.

30
30
30
2013-06-18 12:44:37 +0000

Unter Debian-basiertem Linux bietet das Paket uchardet (Debian ](https://packages.qa.debian.org/u/uchardet.html) / Ubuntu ) ein Kommandozeilenwerkzeug. Siehe unten die Paketbeschreibung:

universal charset detection library - cli utility
 .
 uchardet is a C language binding of the original C++ implementation
 of the universal charset detection library by Mozilla.
 .
 uchardet is a encoding detector library, which takes a sequence of
 bytes in an unknown character encoding without any additional
 information, and attempts to determine the encoding of the text.
 .
 The original code of universalchardet is available at
 http://lxr.mozilla.org/seamonkey/source/extensions/universalchardet
 .
 Techniques used by universalchardet are described at
 http://www.mozilla.org/projects/intl/UniversalCharsetDetection.html
16
16
16
2011-06-24 08:38:40 +0000

Für Linux gibt es enca und für Solaris können Sie auto_ef verwenden.

2
2
2
2013-10-11 16:06:44 +0000

Mozilla hat eine schöne Codebasis für die automatische Erkennung in Webseiten: http://lxr.mozilla.org/seamonkey/source/extensions/universalchardet/src/

Detaillierte Beschreibung des Algorithmus: http://www-archive.mozilla.org/projects/intl/UniversalCharsetDetection.html

2
2
2
2018-11-06 15:42:35 +0000

Für diejenigen, die regelmäßig Emacs benutzen, könnte das folgende nützlich sein (erlaubt es, die Transfomation manuell zu überprüfen und zu validieren).

Außerdem finde ich oft, dass die Emacs-Zeichensatz-Auto-Erkennung viel effizienter ist als die anderen Zeichensatz-Auto-Erkennungs-Tools (wie chardet).

(setq paths (mapcar 'file-truename '(
 "path/to/file1"
 "path/to/file2"
 "path/to/file3"
)))

(dolist (path paths)
  (find-file path)
  (set-buffer-file-coding-system 'utf-8-unix)
  )

Ein einfacher Aufruf von Emacs mit diesem Skript als Argument (siehe die Option “-l”) erledigt dann die Arbeit.

1
1
1
2015-10-28 17:34:06 +0000

isutf8 (aus dem Paket moreutils) erledigte die Aufgabe

1
1
1
2014-01-23 16:12:16 +0000

Zurück zu chardet (python 2.?) könnte dieser Aufruf ausreichen:

python -c 'import chardet,sys; print chardet.detect(sys.stdin.read())' < file
{'confidence': 0.98999999999999999, 'encoding': 'utf-8'}

Obwohl es weit von perfekt…. entfernt ist

echo "öasd" | iconv -t ISO-8859-1 | python -c 'import chardet,sys; print chardet.detect(sys.stdin.read())'
{'confidence': 0.5, 'encoding': 'windows-1252'}
1
1
1
2011-09-03 00:48:04 +0000

UTFCast ist einen Versuch wert. Hat bei mir nicht funktioniert (vielleicht weil meine Dateien schrecklich sind), aber es sieht gut aus. http://www.addictivetips.com/windows-tips/how-to-batch-convert-text-files-to-utf-8-encoding/

0
0
0
2019-07-12 16:39:09 +0000

Auch für den Fall, dass Sie Datei -i gibt Ihnen unbekannt

Sie können diese php-Befehl, der Zeichensatz wie unten erraten kann verwenden:

In php können Sie wie folgt prüfen:

Explizite Angabe der Kodierungsliste :

php -r "echo 'probably : ' . mb_detect_encoding(file_get_contents('myfile.txt'), 'UTF-8, ASCII, JIS, EUC-JP, SJIS, iso-8859-1') . PHP_EOL;"

Genauer “ mb_list_encodings”:

php -r "echo 'probably : ' . mb_detect_encoding(file_get_contents('myfile.txt'), mb_list_encodings()) . PHP_EOL;"

Hier im ersten Beispiel können Sie sehen, dass ich eine Liste von Kodierungen angegeben habe (Reihenfolge der Liste erkennen), die übereinstimmen könnten. Um ein genaueres Ergebnis zu erhalten, können Sie alle möglichen Kodierungen über : mb_list_encodings()

Hinweis mb_* Funktionen benötigen php-mbstring

apt-get install php-mbstring

Siehe Antwort : https://stackoverflow.com/a/57010566/3382822