首页 > 解决方案 > 用UTF-8编码代替CP850安全吗

问题描述

我有一个使用 CP850 编码读取文件的旧项目。但它错误地处理重音字符(例如,Montréal 变为 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  |

标签: encodingutf-8

解决方案


如果超集是指 UTF-8 是否包含 CP850 的所有字符,那么很简单,因为 UTF-8 可以使用可变长度编码(1-4 个字节)对所有有效的 Unicode 代码点进行编码。

如果您的意思是字符的编码方式相同,那么正如您所见,情况并非如此,因为 é (U+00E9) 的编码方式82与 CP850 和C3 A9UTF-8 相同。

我看不到将 Ú 编码为 的字符集/代码页82,但 Ú 被编码为E9CP850,这是 é 的 ISO-8859-1 表示,因此您的转换方式可能错误(即您'正在将您的文件ISO-8859-1转换CP850,并且您想要CP850转换UTF-8)。

这是一个使用hdand的示例iconv

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

推荐阅读