13

我正在尝试将 CP1252 编码的字符串 Çàïèñêè ýêñïåäèòîðà 转换为 UTF-8。我试过这个命令:

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

不走运,得到一些奇怪的结果:

ÊÀÇÀÃÃœ ÎÂÛÉ ÂÅÊ</p>

我尝试在这里输入相同的字符串(Çàïèñêè ýêñïåäèòîðà),他们能够毫无问题地进行转换: http ://www.artlebedev.ru/tools/decoder/

出了什么问题?

4

6 回答 6

23

当您Çàïèñêè ýêñïåäèòîðà使用命令将 CP1252 编码字符串转换为 UTF-8 时iconv.exe -f CP1252 -t UTF-8 test.txt >testout.txt,源文件test.txt(十六进制视图:

在此处输入图像描述

) 将被转换为目标文件testout.txt(十六进制视图:

在此处输入图像描述

) 这是 UTF-8 代码Çàïèñêè ýêñïåäèòîðà

你放入的同样的垃圾会从另一端出来。iconv 的行为是正确的并且符合预期。

您感到困惑的是您看不到您的期望,那是因为您输入的 8 位字符串实际上是在Windows-1251 (Cyrillic) Codepage中编码的。

→ 所以正确的代码页不是 CP1252但是CP125 1 ←</p>

在此处输入图像描述

命令iconv.exe -f CP1251 -t UTF-8 test.txt >testout2.txt将源文件test.txt转换为目标文件testout2.txt(十六进制视图:

在此处输入图像描述

Записки экспедитора) 这是用户期望看到的UTF-8 代码

于 2014-09-16T10:48:29.140 回答
7

你需要使用这个:

$ echo "Çàïèñêè ýêñïåäèòîðà" | iconv -t latin1 | iconv -f cp1251
Записки экспедитора
于 2014-02-12T16:39:46.953 回答
3

我的解决方案:

iconv -f windows-1252 -t utf-8 in.file -o out.file
于 2013-12-09T11:26:49.573 回答
0

如果你使用的是 linux,你应该使用enconv

./enconv.sh -d /home/foo/example/directory -e ".java" -f "iso-8859-1" -t "utf-8"
于 2015-07-14T22:09:22.330 回答
0
iconv -f utf8 -t cp1252 file.php | iconv -f cp1251 -t utf8 > file-utf8.php
于 2015-11-05T10:47:31.063 回答
-1

尝试相反

  iconv -c -f=UTF-8 -t=WINDOWS-1252 test.txt
于 2013-05-07T13:58:23.390 回答