如何恢复通过字符编码绞拧器发送的文档?

时间:2009-09-12 21:40:21

标签: unicode automation character-encoding repair

直到最近,我的博客使用了PHP和MySQL不匹配的字符编码设置。我已经解决了潜在的问题,但我仍然有大量充满垃圾的文本。例如,ï已成为ï

是否有软件可以使用模式识别和统计来自动发现损坏的文本并进行修复?

例如,看起来U+00EF(UTF-8 0xC3 0xAF)已成为U+00C3 U+00AF(UTF-8 0xC3 0x83 0xC2 0xAF)。换句话说,十六进制编码已用于代码点。这种模式在我的网站上发生了(看似随机的)非ASCII字符。

2 个答案:

答案 0 :(得分:1)

你引用的例子看起来像老式的utf8-over-latin1。您可以快速尝试以下查询:

select convert(convert(the_problem_column using binary) using utf8)

看看它是否能解决问题。

只要所有数据都经过相同的编码转换序列,并且只要这些转换都不是有损的,那么沿着这些行的编码转换应该有效 - 你只是扭转了其中一些转换的影响。

如果您不能依赖于经过同一组编码转换的数据,则需要扫描数据中的垃圾字符并将其替换为预期的字符,这有风险,因为它取决于某人的什么是垃圾和预期的定义。

answer中有关如何使用手工脚本进行此类修复的讨论。我不知道一种能够识别各种自然语言和编码的工具,它采用更先进的统计方法来发现可能存在的问题,并建议进行精确的转换以解决问题 - 这样的事情会很有用。

答案 1 :(得分:0)

您可能希望查看正则表达式http://en.wikipedia.org/wiki/Regular_expression。 使用此功能,您可以搜索并替换相关字符。

这是MySQL正则表达式文档,http://dev.mysql.com/doc/refman/5.1/en/regexp.html