encoding - 用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 |
解决方案
如果超集是指 UTF-8 是否包含 CP850 的所有字符,那么很简单,因为 UTF-8 可以使用可变长度编码(1-4 个字节)对所有有效的 Unicode 代码点进行编码。
如果您的意思是字符的编码方式相同,那么正如您所见,情况并非如此,因为 é (U+00E9) 的编码方式82
与 CP850 和C3 A9
UTF-8 相同。
我看不到将 Ú 编码为 的字符集/代码页82
,但 Ú 被编码为E9
CP850,这是 é 的 ISO-8859-1 表示,因此您的转换方式可能错误(即您'正在将您的文件从ISO-8859-1转换为CP850,并且您想要从CP850转换为UTF-8)。
这是一个使用hd
and的示例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
推荐阅读
- javascript - 如何在 JavaScript 中创建多个类实例?
- guptateamdeveloper - 如何从 .app 文件动态构建 .exe 文件?
- hyperledger-composer - Hyperledger composer-cli 安装失败的 Mac OS
- python - 收到错误消息“预期有缩进块”
- android - 在firestore android中使用whereArrayContains检查多个值
- swift - 如何在我的 JSON 文件中打印任何内容?
- nativescript - 使用角度模板在nativescript中隐藏状态栏的正确方法是什么?
- c# - 调用“ShutdownBlockReasonCreate”函数不会阻止用户关闭系统
- javascript - 单击按钮时Javascript不执行PHP文件
- datetime - 模块 'datetime' 没有属性 'strptime'