我有一个老项目,正在读取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 |
答案 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)。
下面是使用hd
和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