linux – テキストファイルのエンコーディングを自動検出するには?

batch encoding linux

変形文字セットでエンコードされたプレーンテキストファイルがたくさんあります

全部UTF-8に変換したいのですが、iconvを実行する前に元のエンコーディングを知る必要があります。ほとんどのブラウザではエンコーディングにAuto Detectというオプションがあるのですが、それらのテキストファイルが多すぎて一つ一つ確認することができません

元のエンコーディングを知っているだけで、iconv -f DETECTED_CHARSET -t utf-8でテキストを変換することができます

プレーンテキストファイルのエンコーディングを検出するユーティリティはありますか?それは100%完璧である必要はありません、私は100万ファイルで100個のファイルが誤って変換されていても気にしません

  79  None  2011-06-24


ベストアンサー

PyPIで公開されているchardetのPythonモジュールを試してみてください

pip install chardet

そして、chardetect myfile.txtを実行します

Chardet は Mozilla が使用している 検出コード に基づいています。プロジェクトのドキュメントを読んでください

コメントで述べたように、かなり遅いですが、Xavier が https://superuser.com/a/609056 で見つけたように、いくつかのディストリビューションではオリジナルの C++ 版も提供されています。また、どこかにJava版もあります

69  community wiki  2020-04-20


私ならこんな簡単なコマンドを使います

encoding=$(file -bi myfile.txt)

あるいは、実際の文字セット(utf-8のような)だけが欲しい場合

encoding=$(file -b --mime-encoding myfile.txt)

37  None  2011-10-28


Debian ベースの Linux では、uchardet パッケージ (Debian / Ubuntu) がコマンドラインツールを提供しています。以下のパッケージ説明を参照してください

 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
301 Moved Permanently

30  Xavier  2013-06-18


Linux では enca、Solaris では auto_ef があります

16  cularis  2011-06-24


Mozilla はウェブページの自動検出のための素晴らしいコードベースを持っています。 http://lxr.mozilla.org/seamonkey/source/extensions/universalchardet/src/

アルゴリズムの詳細な説明。 http://www-archive.mozilla.org/projects/intl/UniversalCharsetDetection.html

2  Martin Hennings  2013-10-11


普段からEmacsを使っている人には、以下のような便利な機能があるかもしれません(トランスフォームを手動で検査したり、検証したりすることができます)

さらに、Emacs の char-set 自動検出は、他の char-set 自動検出ツール (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)
)

そして、このスクリプトを引数としてEmacsを呼び出すだけで(”-l “オプションを参照)、仕事をしてくれます

2  Yves Lhuillier  2018-11-06


UTFCastは試してみる価値があります。私にはうまくいきませんでしたが(私のファイルがひどいからかもしれませんが)、いい感じです

How To Batch Convert Text Files To UTF-8 Encoding
UTFCast is a small tool for Windows that lets you batch convert all text files to UTF-8 encoding. It can convert a directory full of text files and keep

1  Sameer Alibhai  2011-09-03


chardetに戻って(python 2.かな?)この呼び出しで十分かもしれません

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

完璧には程遠いですが

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  estani  2014-01-23


isutf8 (moreutils パッケージから) が仕事をしてくれました

1  Ronan  2015-10-28


また、-iをファイルすると不明な点が出てきます

あなたは以下のように文字コードを推測することができますこのphpコマンドを使用することができます

phpでは以下のように確認することができます

エンコーディングリストを明示的に指定する

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

より正確な “mb_list_encodings”

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

最初の例では、一致する可能性のあるエンコーディングのリスト(リストの順番を検出する)を置いています。より正確な結果を得るためには、 mb_list_encodings() を使ってすべての可能なエンコーディングを使うことができます

mb_* 関数は php-mbstring を必要とすることに注意しましょう

apt-get install php-mbstring

回答を参照してください。https://stackoverflow.com/a/57010566/3382822

0  Mohamed23gharbi  2019-07-12


タイトルとURLをコピーしました