如何诊断和扭转(而不是防止)Unicode损坏

如何诊断和扭转(而不是防止)Unicode损坏,unicode,string,reverse-engineering,corruption,Unicode,String,Reverse Engineering,Corruption,在我上游的某个地方,发生了一件看起来像是unicode损坏的事情。一个症状是小写的u umlaut(ü)转换为“ü”(即字符FC转换为C3 BC)。假设我无法控制这个上游过程,我如何对正在发生的事情进行反向工程?如果可能的话,我能把香肠机倒过来,把原文拿回来吗 (如果这有助于理解这个案例,那么我收到的文本是MySQL转储的形式。我想在转储/传输过程中,它被损坏了。)首先,它看起来像是用UTF-8编码的文本(正如您发现的ü以预期的编码解释,可能是拉丁语-1) 您可以通过检查是否使用了正确的字节

在我上游的某个地方,发生了一件看起来像是unicode损坏的事情。一个症状是小写的u umlaut(ü)转换为“ü”(即字符FC转换为C3 BC)。假设我无法控制这个上游过程,我如何对正在发生的事情进行反向工程?如果可能的话,我能把香肠机倒过来,把原文拿回来吗


(如果这有助于理解这个案例,那么我收到的文本是MySQL转储的形式。我想在转储/传输过程中,它被损坏了。)

首先,它看起来像是用UTF-8编码的文本(正如您发现的
ü
以预期的编码解释,可能是拉丁语-1)

您可以通过检查是否使用了正确的字节序列(当然还有未使用的非法字节序列)来猜测使用了这种编码。请参阅以获取参考,并查找有效和无效的字节序列。如果文本以a开头,您可以非常确定编码,但UTF-8不需要


要将文本恢复到所需的编码方式,可以使用多种工具,例如。

您的文本没有“损坏”。它只是在UTF8中。c3bc是被认为是编码的。只要将您使用的任何软件也设置为UTF8,所有的痛苦都会消失。如果你不能把你的软件设置成Unicode,认真考虑切换到更新的软件。
我知道一开始很吓人,但无论如何,你最终还是得这么做。不久前,我最喜欢的音乐排字机切换到了只使用Unicode输入(他们甚至故意取消了对旧的8位代码页的支持,以便让人们切换),我很不高兴,认为拉丁语-1对我来说已经足够好了,而且打破那些工作正常的东西是愚蠢的。。。然后我克服了它,把emacs设置为Unicode缓冲区,现在我再也不用考虑字符编码了

谢谢-维基百科的文章解释了很多。所以本质上我拥有的是一个字符串(在Java中),由不知何故错过了从UTF-8解码的字符组成。因此最终的修复包括替换:x=results.getString(“field”);x=新字符串(rs.getBytes(“字段”),“UTF-8”);想必我会找到一种更优雅的方法,但这是向前迈出的一大步,尤其是在我的理解上。谢谢两位。