【发布时间】:2014-07-02 14:46:24
【问题描述】:
我正在处理一个使用 UTF-8 编码两次的旧文件。例如,代码点 ε (U+03B5) 应该被编码为 CE B5,但被编码为 C3 8E C2 B5(CE 8E 是 U+00CE 的 UTF-8 编码,C2 B5 是U+00B5 的 UTF-8 编码)。
假设数据在 CP-1252 中编码,已执行第二次编码。
要返回到 UTF-8 编码,我使用以下(似乎是错误的)命令
iconv --from utf8 --to cp1252 <file.double-utf8 >file.utf8
我的问题是 iconv 似乎无法转换回某些字符。更准确地说,iconv 无法转换 UTF-8 表示包含映射到 CP-1252 中的控制字符的字符的字符。一个例子是代码点ρ (U+03C1):
- 它的UTF-8编码是
CF 81, - 第一个字节
CF被重新编码为C3 8F, - 第二个字节
81被重新编码为C2 81。
iconv 拒绝将C2 81 转换回81,可能是因为它不知道如何精确映射该控制字符。
echo -e -n '\xc3\x8f\xc2\x81' | iconv --from utf8 --to cp1252
�iconv: illegal input sequence at position 2
如何告诉 iconv 只执行数学 UTF-8 转换而不关心映射?
【问题讨论】:
标签: encoding utf-8 character-encoding iconv cp1252