文字コードに問題があるテキストファイル(私の母国語であるペルシャ語の字幕ファイルなど)をよく見かけます。これらのファイルはWindowsで作成され、適切でないエンコーディング(ANSIと思われる)で保存されており、このようにちんぷんかんぷんで読めない状態になっています。
。
Windowsでは、以下のようにNotepad++を使ってエンコードをUTF-8に変換すれば、簡単に修正できます。
画像の説明を入力してください]4 。
そして、正しく読める結果は次のようになります。
画像の説明を入力してください]5。
GNU/Linuxで同様の解決策をたくさん探しましたが、残念ながら提案された解決策(例えばこの質問)はうまくいきません。特に、iconv`やrecode`を勧めているのを見ましたが、これらのツールではうまくいきませんでした。以下のコマンドを含め、多くのコマンドを試しましたが、すべて失敗しました。
$ recode ISO-8859-15..UTF8 file.txt
$ iconv -f ISO8859-15 -t UTF-8 file.txt > out.txt
$ iconv -f WINDOWS-1252 -t UTF-8 file.txt > out.txt
どれもうまくいきません!
私はUbuntu-14.04を使用しており、Notepad++と同じように動作する簡単な解決策(GUIまたはCLIのいずれか)を探しています。
むしろ、ソースエンコーディングはツールによって自動的に検出され、ターゲットエンコーディングのみがユーザーによって提供されるべきです。しかし、それにもかかわらず、ソースエンコーディングを提供することを必要とする実用的なソリューションについて知ることができるのは嬉しいことです。
もし誰かがいろいろな解決策を調べるためのテストケースを必要とするなら、上記の例はこのリンクからアクセス可能です。
このペルシア語テキストのWindowsファイルは、Windows-1256でエンコードされています。そのため、OPと同じようなコマンドで解読することができますが、文字コードが異なります。すなわち
Windows-1256..UTF-8 <Windows_file.txt > UTF8_file.txt` (元の投稿者の苦情により糾弾。コメント参照)
iconv -f Windows-1256 Windows_file.txt > UTF8_file.txt
これは、環境変数LANGにUTF-8ロケールが設定されていることを前提にしています。現在のロケールに関係なく、任意のエンコーディング(UTF-8など)に変換するためには、次のようにします。
iconv -f Windows-1256 Windows_file.txt -t ${output_encoding} > ${output_file}
元の投稿者は、テキスト再コード化ツール(recode, iconv)の意味も混同しているようです。ソースエンコーディング (source..
または -f) では、ファイルが (それを作成したプログラムによって) **保存されたときのエンコーディングを指定する必要があります。読み込もうとする(しかし失敗する)プログラムのモジバケ文字に基づく(naïve)推測ではありません。ISO-8859-15やWINDOWS-1252でペルシャ語のテキストを読もうとすると、明らかに袋小路にはまります。
私はGeditを使っていますが、間違ったエンコーディングでエラーになり、UTF-8に変換したいものを選択することができます。
。
申し訳ありませんが、私は最終的に私のテキストファイルを通過したので、今、彼らはすべて変換されています。
notepad++も大好きでした、今でも懐かしいです。
この問題を補完するものとして、Incnis Mrsi's answer の iconv
コマンドを基にした便利な Bash スクリプトを用意しました。
#!/bin/bash
if [ $# -lt 1 ]
then
echo 'Specify at least one file to fix.'
exit 1
fi
# Temp file to store conversion attempt(s).
tmp='tmp.fixed'
for file in "[email protected]"
do
# Try to fix the file encoding.
if iconv -f WINDOWS-1256 "$file" -t UTF-8 > $tmp; then
echo "Fixed: '$file'"
cat $tmp > "$file"
else
echo "Failed to fix: '$file'"
fi
done
rm $tmp
このスクリプトを fix-encoding.sh
という名前で保存し、chmod +x fix-encoding.sh
で実行権限を与えて、以下のように使ってみてください。
./fix-encoding.sh myfile.txt my2ndfile.srt my3rdfile.sub
このスクリプトは、入力として与えられた任意の数のファイルのエンコーディングを修正しようとします。ファイルはインプレースで修正されるので、中身は上書きされることに注意してください。