変形文字セットでエンコードされたプレーンテキストファイルがたくさんあります
全部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は試してみる価値があります。私にはうまくいきませんでしたが(私のファイルがひどいからかもしれませんが)、いい感じです
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