web-dev-qa-db-ja.com

iconv:CP1252からUTF-8に変換

CP1252でエンコードされた文字列ÇàïèñêèýêñïåäèòîðàをUTF-8に変換しようとしています。私はこのコマンドを試しました:

iconv -c -f=WINDOWS-1252 -t=UTF-8 test.txt

運が悪い、奇妙な結果が出る:

ÊÀÇÀÃÃœÃÎÂÛÉÂÅÊ

ここに同じ文字列(Çàïèñêèýêñïåäèòîðà)を入力してみましたが、問題なく変換できます: http://www.artlebedev.ru/tools/decoder/

何が問題なのですか?

11
Somebody

コマンドÇàïèñêè ýêñïåäèòîðàを使用してCP1252でエンコードされた文字列iconv.exe -f CP1252 -t UTF-8 test.txt >testout.txtをUTF-8に変換すると、ソースファイルtest.txt(16進ビュー:

enter image description here

)はターゲットファイルtestout.txtに変換されます(16進ビュー:

enter image description here

)これはÇàïèñêè ýêñïåäèòîðàのUTF-8コードです。

あなたが入れたのと同じゴミがもう一方の端に出てきます。 iconvの動作は正しく、期待どおりです。

あなたが困惑しているのは、あなたが期待するものが見えないということです、そしてそれはあなたの入力8ビット文字列が実際に Windows-1251(キリル文字)コードページ でエンコードされているからです。

→したがって、正しいコードページはCP125ではありません2 しかしCP1251

enter image description here

コマンドiconv.exe -f CP1251 -t UTF-8 test.txt >testout2.txtは、ソースファイルtest.txtをターゲットファイルtestout2.txtに変換します(16進ビュー:

enter image description here

)これはЗаписки экспедитораのUTF-8コードであり、ユーザーが期待するものです。

20
xmojmr

これを使用する必要があります:

$ echo "Çàïèñêè ýêñïåäèòîðà" | iconv -t latin1 | iconv -f cp1251
Записки экспедитора
5
mega.venik

私の解決策:

iconv -f windows-1252 -t utf-8 in.file -o out.file
1
Java Dude

linuxを使用している場合は、 enconv を使用する必要があります。

./enconv.sh -d /home/foo/example/directory -e ".Java" -f "iso-8859-1" -t "utf-8"
0
thiagoh
iconv -f utf8 -t cp1252 file.php | iconv -f cp1251 -t utf8 > file-utf8.php
0
ssyyzz