2

さまざまなエンコーディングのテキスト ファイルがたくさんあります。しかし、すべてをutf-8に変換したいのです。約1000個のファイルがあるため、手動ではできません。llinux には、ファイルのエンコーディングをあるエンコーディングから別のエンコーディングに変更するコマンドがいくつかあることを知っています。しかし、私の質問は、ファイルの現在のエンコーディングを自動的に検出する方法ですか? 明らかに、これを行うためのコマンド ( FindEncoding($File) など) を探しています。

foreach file
do
$encoding=FindEncoding($File);
uconv -f $encoding -t utf-8 $file;
done
4

1 に答える 1

5

私は通常次のようにsthを行います:

for f in *.txt; do
    encoding=$(file -i "$f" | sed "s/.*charset=\(.*\)$/\1/")
    recode $encoding..utf-8 "$f"
done

再コード化すると、文字エンコードを変更するためにファイルが上書きされることに注意してください。拡張子でテキストファイルを識別できない場合は、それぞれのmimeタイプを。で判別できますfile -bi | cut -d ';' -f 1

また、最初にUFT-8をチェックして、不要な再エンコードを回避することもおそらく良い考えです。

if [ ! "$encoding" = "utf-8" ]; then
    #encode

us-asciiこの処理の後、エンコードされたファイルがまだ残っている可能性があります。その理由は、ASCIIがUTF-8のサブセットであり、ASCIIで表現できない文字が導入されない限り使用され続けるためです。その場合、エンコーディングはUTF-8に切り替わります。

于 2013-01-08T22:54:32.787 に答える