我正在尝试将CP1252编码的字符串Çàïèñêèýêñïåäèòîðà转换为UTF-8。我试过这个命令:
iconv -c -f=WINDOWS-1252 -t=UTF-8 test.txt
没有运气,得到一些奇怪的结果:
ÃÃ>ÃÃÃÃÃÃÃÃÃÃÃ,,,
我尝试在这里输入相同的字符串(Çàïèñêèýêñïåäèòîðà),他们可以毫无问题地转换它: http://www.artlebedev.ru/tools/decoder/
出了什么问题?
答案 0 :(得分:18)
使用命令Çàïèñêè ýêñïåäèòîðà
将CP1252编码字符串iconv.exe -f CP1252 -t UTF-8 test.txt >testout.txt
转换为UTF-8时,源文件test.txt
(十六进制视图:
)将转换为目标文件testout.txt
(十六进制视图:
)Çàïèñêè ýêñïåäèòîðà
的UTF-8代码。
你投入的同样垃圾将会到另一端。 iconv的行为是正确的,正如预期的那样。
您感到困惑的是,您没有看到您的期望,这是因为您输入的8位字符串实际上是在Windows-1251 (Cyrillic) Codepage中编码的。
→所以正确的代码页不是CP125 2 ,而是CP125 1 ←
命令iconv.exe -f CP1251 -t UTF-8 test.txt >testout2.txt
将源文件test.txt
转换为目标文件testout2.txt
(十六进制视图:
)这是Записки экспедитора
的UTF-8代码,这是您的用户希望看到的内容
答案 1 :(得分:5)
你需要使用这个:
$ echo "Çàïèñêè ýêñïåäèòîðà" | iconv -t latin1 | iconv -f cp1251
Записки экспедитора
答案 2 :(得分:1)
我的解决方案:
iconv -f windows-1252 -t utf-8 in.file -o out.file
答案 3 :(得分:0)
如果您使用的是Linux,则应使用enconv
./enconv.sh -d /home/foo/example/directory -e ".java" -f "iso-8859-1" -t "utf-8"
答案 4 :(得分:0)
iconv -f utf8 -t cp1252 file.php | iconv -f cp1251 -t utf8 > file-utf8.php
答案 5 :(得分:-1)
尝试相反的
iconv -c -f=UTF-8 -t=WINDOWS-1252 test.txt