CP1252でエンコードされた文字列ÇàïèñêèýêñïåäèòîðàをUTF-8に変換しようとしています。私はこのコマンドを試しました:
iconv -c -f=WINDOWS-1252 -t=UTF-8 test.txt
運が悪い、奇妙な結果が出る:
ÊÀÇÀÃÃœÃÎÂÛÉÂÅÊ
ここに同じ文字列(Çàïèñêèýêñïåäèòîðà)を入力してみましたが、問題なく変換できます: http://www.artlebedev.ru/tools/decoder/
何が問題なのですか?
コマンドÇàïèñêè ýêñïåäèòîðà
を使用してCP1252でエンコードされた文字列iconv.exe -f CP1252 -t UTF-8 test.txt >testout.txt
をUTF-8に変換すると、ソースファイルtest.txt
(16進ビュー:
)はターゲットファイルtestout.txt
に変換されます(16進ビュー:
)これはÇàïèñêè ýêñïåäèòîðà
のUTF-8コードです。
あなたが入れたのと同じゴミがもう一方の端に出てきます。 iconvの動作は正しく、期待どおりです。
あなたが困惑しているのは、あなたが期待するものが見えないということです、そしてそれはあなたの入力8ビット文字列が実際に Windows-1251(キリル文字)コードページ でエンコードされているからです。
→したがって、正しいコードページはCP125ではありません2 しかしCP1251 ←
コマンドiconv.exe -f CP1251 -t UTF-8 test.txt >testout2.txt
は、ソースファイルtest.txt
をターゲットファイルtestout2.txt
に変換します(16進ビュー:
)これはЗаписки экспедитора
のUTF-8コードであり、ユーザーが期待するものです。
これを使用する必要があります:
$ echo "Çàïèñêè ýêñïåäèòîðà" | iconv -t latin1 | iconv -f cp1251
Записки экспедитора
私の解決策:
iconv -f windows-1252 -t utf-8 in.file -o out.file
linuxを使用している場合は、 enconv を使用する必要があります。
./enconv.sh -d /home/foo/example/directory -e ".Java" -f "iso-8859-1" -t "utf-8"
iconv -f utf8 -t cp1252 file.php | iconv -f cp1251 -t utf8 > file-utf8.php