是否存在我需要在Latin 1中修复的隐藏编码错误 - > UTF-8?

时间:2015-01-23 22:10:48

标签: mysql utf-8 character-encoding latin1

我还需要对看起来完全没问题的文本进行完整的latin1到UTF 8转换吗?

我正在交换论坛软件,旧的论坛数据库使用Latin1编码。新论坛数据库对表使用UTF8编码。

看起来导入器脚本直接从一个表复制到另一个表,而没有尝试修复任何编码问题。

我一直在根据此处列出的转化信息使用查找和替换手动修复可见错误:http://www.i18nqa.com/debug/utf8-debug.html

文本的其余部分看起来很好并且完全可读。

我有限的理解是,UTF-8向后兼容ASCII,而Latin1主要是ASCII,因此只有边缘情况不同且需要更新。

那么我仍然需要对看起来完全正常的文本运行完整的latin1到UTF 8转换吗?

我不愿意,因为我在UTF 8中存储了多个字段后,我已经更改了一些BB代码,因此担心这些更新会在Latin1字符的中间插入UTF8字符并尝试对混合字符集进行完全转换只会进一步搞砸。

1 个答案:

答案 0 :(得分:0)

ISO 8859-1(Latin 1)中0x80..0xFF范围内的任何字符都需要在UTF-8中重新编码为2个字节。对于0x80..0xBF,第一个字节是0xC2;对于0xC0..0xFF,第一个字节是0xC3。通过将两个最高有效位设置为1和0,从拉丁语1的原始值派生第二个字节。对于字符0x80..0xBF,第二个字节的值与拉丁语1不变。如果您使用的是8859- 15,你可能会有一些更复杂的转换(欧元符号的编码方式与其他拉丁文1个字符不同)。

有很多工具可以提供帮助。 iconv就是其中之一。