Unicode 如何恢复通过字符编码wringer发送的文档?

Unicode 如何恢复通过字符编码wringer发送的文档?,unicode,automation,character-encoding,repair,Unicode,Automation,Character Encoding,Repair,直到最近,我的博客还使用了不匹配的PHP和MySQL字符编码设置。我已经修复了潜在的问题,但是我仍然有大量的文本被垃圾填满。例如,ï已成为Ã 有没有软件可以使用模式识别和统计来自动发现并修复损坏的文本 例如,它看起来像是U+00EF(UTF-80xC3 0xAF)已经变成U+00C3 U+00AF(UTF-80xC3 0x83 0xC2 0xAF)。换句话说,十六进制编码已用于代码点。在我的网站上,这种模式(似乎是随机的)非ASCII字符都出现过。您可能想查看regex。 使用此选项,您可以搜索

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

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


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

您可能想查看regex。 使用此选项,您可以搜索并替换有问题的字符


这是MySQL正则表达式文档。

您可能想查看正则表达式。 使用此选项,您可以搜索并替换有问题的字符


这是MySQL正则表达式文档。

您引用的示例看起来像是很好的旧utf8-over-latin1。您可以快速尝试以下查询:

select convert(convert(the_problem_column using binary) using utf8)
看看能不能解决这个问题

只要您的所有数据都经历了相同的编码转换序列,并且只要这些转换中没有一个是有损的,那么沿着这些线进行的编码转换就应该可以工作——您只是在逆转其中一些转换的效果

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


本文将讨论如何使用手工脚本进行此类修复。我不知道有哪种工具能够了解所有的自然语言和编码,能够采用更先进的统计方法来发现可能的问题,并且能够推荐精确的转换来解决问题——类似这样的方法会很有用。

您引用的示例看起来像是很好的旧utf8-over-latin1。您可以快速尝试以下查询:

select convert(convert(the_problem_column using binary) using utf8)
看看能不能解决这个问题

只要您的所有数据都经历了相同的编码转换序列,并且只要这些转换中没有一个是有损的,那么沿着这些线进行的编码转换就应该可以工作——您只是在逆转其中一些转换的效果

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


本文将讨论如何使用手工脚本进行此类修复。我不知道有哪种工具能够了解各种自然语言和编码,能够采用更先进的统计方法来发现可能的问题,并且能够推荐精确的转换来解决问题——类似这样的方法会很有用。

我编辑了我的帖子,澄清这不仅仅是这个字符。我的意思是,我当然可以转储数据库,找到所有非ASCII字符序列,找到它们的原始值(在适当的情况下),并在整个文件中运行直接查找和替换。。。但我正在寻找一个更为普遍的解决方案。我编辑了我的帖子,以澄清:不仅仅是这个角色。我的意思是,我当然可以转储数据库,找到所有非ASCII字符序列,找到它们的原始值(在适当的情况下),并在整个文件中运行直接查找和替换。。。但我正在寻找一个更普遍的解决方案。