在我上游的某个地方,发生了“某事”,看起来像 unicode mangling。一种症状是小写的 u 变音符号 (ü) 被转换为“ü”(即字符 FC 被转换为 C3 BC)。假设我无法控制这个上游流程,我该如何对正在发生的事情进行逆向工程?如果可能的话,我可以向后转动香肠机并取回原始文本吗?
(如果有助于理解这种情况,我收到的文本是 MySQL 转储的形式。我认为在转储/传输过程中的某个地方它被破坏了。)
在我上游的某个地方,发生了“某事”,看起来像 unicode mangling。一种症状是小写的 u 变音符号 (ü) 被转换为“ü”(即字符 FC 被转换为 C3 BC)。假设我无法控制这个上游流程,我该如何对正在发生的事情进行逆向工程?如果可能的话,我可以向后转动香肠机并取回原始文本吗?
(如果有助于理解这种情况,我收到的文本是 MySQL 转储的形式。我认为在转储/传输过程中的某个地方它被破坏了。)
您的文字没有“损坏”。它只是在 UTF8 中。C3 BC 是 ü应该被编码的内容。只需将您使用的任何软件也设置为 UTF8,所有痛苦都会消失。如果您无法将软件设置为 Unicode,请认真考虑切换到较新的软件。
我知道一开始这很可怕,但无论如何你最终都必须这样做。不久前,我最喜欢的音乐排字机切换到仅 Unicode 输入(他们甚至故意删除了对旧 8 位代码页的支持以让人们切换),我很沮丧,认为 Latin-1 对我来说已经足够好了,破坏运行良好的东西是愚蠢的......然后我克服了它并将emacs设置为Unicode缓冲区,现在我再也不必考虑我的生活中的字符编码了!
首先,看起来您已经获得了 UTF-8 编码文本(正如您发现ü以预期编码解释的那样,可能是 Latin-1)。
您可以通过检查是否使用了正确的字节序列(当然还有未使用的非法字节序列)来猜测正在使用的编码。请参阅Wikipedia 文章以获取参考并查找有效和无效的字节序列。如果文本以BOM开头,您可以非常确定编码,但这不是 UTF-8 所必需的。
要将文本恢复为所需的编码,可以使用多种工具,其中之一是GNU recode。