文字エンコードの問題のあるテキストファイル(母国語の字幕ファイル、 ペルシャ語 など)に頻繁に遭遇します。これらのファイルはWindowsで作成され、不適切なエンコード(ANSIのようです)で保存されます。
Windowsでは、次のように Notepad ++ を使用してエンコードをUTF-8に変換することで、これを簡単に修正できます。
そして、読み取り可能な正しい結果は次のようになります。
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)を探しています。
"simple"であることの1つの重要な側面は、ユーザーがソースエンコーディングを決定する必要がないことです。むしろ、ソースエンコーディングはツールによって自動的に検出され、ターゲットエンコーディングのみがユーザーによって提供される必要があります。しかし、それでも、ソースエンコーディングの提供を必要とする実用的なソリューションについて知りたいと思います。
さまざまなソリューションを調べるためにテストケースが必要な場合、上記の例にアクセスできます このリンクを介して 。
私が見つけた実用的なソリューションは、フリーウェアでLinuxで利用可能な Microsoft Visual Studio Code テキストエディターを使用していることです。
VS-Codeでエンコードを変換するファイルを開きます。ウィンドウの下部には、いくつかのボタンがあります。それらの1つは、以下に示すように、ファイルエンコーディングに関連しています。
このボタンをクリックすると、2つのアイテムを含むオーバーヘッドメニューがポップアップ表示されます。このメニューから、以下のように「エンコードで再開」オプションを選択します。
これにより、以下に示すように、異なるエンコードのリストを含む別のメニューが開きます。 「アラビア語(Windows 1256)」を選択します:
これにより、このような意味不明なテキストが修正されます。
エンコードボタンをもう一度クリックし、今度は「エンコード付きで保存」オプションを選択します。次のとおりです。
そして、新しいメニューで「UTF-8」オプションを選択します。
これにより、UTF-8エンコードを使用して修正されたファイルが保存されます。
できた! :)
ペルシャ語のテキストを含むこれらのWindowsファイルは、Windows-1256でエンコードされます。そのため、OPに似たコマンドで解読できますが、文字セットが異なります。すなわち:
recode 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)の場合、ファイルのエンコーディングを指定する必要がありますsaved(それを作成したプログラムによって)。読み込もうとする(しかし失敗する)プログラムの文字文字に基づいた(ナイーブな)推測はありません。ペルシャ語のテキストに対してISO-8859-15またはWINDOWS-1252を試すことは明らかに行き詰まりでした。これらのエンコーディングにはペルシャ語の文字が含まれていません。
CLIの代わりにGUIで作業するのが好きなら、私がそうするように:
この問題を補完する解決策として、 Incnis Mrsiの答え からの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 "$@"
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
このスクリプトは、入力として提供される任意の数のファイルのエンコードを修正しようとします。ファイルはその場で修正されるため、内容は上書きされます。
単独またはスクリプトで非常に便利なツールであるiconv
の他に、ギリシャ文字セット(Windows-1253 + ISO-8859-7 )。
あなたがする必要があるのは、テキストファイルを開くことですGeditの「開く」ダイアログを介してとそれをダブルクリックすることではありません。ダイアログボックスの下部に、 "Automatically Detected"に設定されたEncodingのドロップダウンがあります。 「Windows-125x」またはその他の適切なコードセットに変更すると、Geditでテキストが完全に読み取り可能になります。その後、UTF-8エンコードを使用して保存し、将来同じ問題が発生しないことを確認してください...
これがペルシア語で機能するかどうかはわかりません:Geditを使用していますが、間違ったエンコーディングでエラーが発生し、UTF-8に変換したいものを選択できます。 !
申し訳ありませんが、ようやくテキストファイルを取得できたので、すべて変換されました。
私もnotepad ++が大好きで、まだ恋しいです。