用UTF-8编码替换CP850是否安全?

时间:2018-07-11 14:45:15

标签: encoding utf-8

我有一个老项目,正在读取CP850编码的文件。但这会错误处理重音符号(例如,蒙特利尔变成了MontrÚal)。 我想用UTF-8替换CP850。问题是:

安全吗?换句话说,我们是否可以假设UTF-8是超集,并且编码方式与CP850编码字符相同?

谢谢

我尝试了hexdump,以下是我的csv文件的示例,是UTF-8吗?

000000d0  76 20 64 65 20 4d 61 72  6c 6f 77 65 2c 2c 4d 6f  |v de Marlowe,,Mo|
000000e0  6e 74 72 c3 a9 61 6c 2c  51 43 2c 48 34 41 20 20  |ntr..al,QC,H4A  |

1 个答案:

答案 0 :(得分:3)

如果用超集表示UTF-8是否包含CP850的所有字符,那么可以肯定地是,因为UTF-8可以使用可变长度编码(1-4个字节)来编码所有有效的Unicode代码点。

如果您的意思是字符以相同的方式编码,则您并非如此,因为é(U + 00E9)在CP850中编码为82,在UTF中编码为C3 A9 -8。

我看不到一个将Ú编码为82的字符集/代码页,但是在CP850(é的ISO-8859-1表示形式)中,Ú被编码为E9。您的转换方式错误(例如,将文件 ISO-8859-1 转换为 CP850,并且您想将转换为 CP850( to UTF-8)。

下面是使用hdiconv的示例:

hd test.cp850.txt
00000000  4d 6f 6e 74 72 82 61 6c                           |Montr.al|
00000008

iconv --from cp850 --to utf8 test.cp850.txt > test.utf8.txt

hd test.utf8.txt
00000000  4d 6f 6e 74 72 c3 a9 61  6c                       |Montr..al|
00000009