Unicode 什么能解释这种糟糕的字符编码?

Unicode 什么能解释这种糟糕的字符编码?,unicode,encoding,utf-8,character-encoding,Unicode,Encoding,Utf 8,Character Encoding,什么“堆栈”的错误编码会为字符串“cinéma télédiffusion”产生以下奇怪的字节?(我省略了空格字符,十六进制:20) ---�---- 部分表示不正确的字节 我考虑过“如果这是一个混乱的转码呢?双重编码怎么样?”的想法,但是,看看(以及代码页版本),我注意到没有可能以十六进制字节%25或%63结尾的编码。在这一点上,它甚至看起来不像双UTF8编码,因为,澄清了%C3后面的字节需要将第一位设置为10xxxxxx 有些节目怎么能把重音变成“Ã后接%”以及“Ã后接c”?我想追溯mise

什么“堆栈”的错误编码会为字符串“cinéma télédiffusion”产生以下奇怪的字节?(我省略了空格字符,十六进制:20)

---�---- 部分表示不正确的字节

我考虑过“如果这是一个混乱的转码呢?双重编码怎么样?”的想法,但是,看看(以及代码页版本),我注意到没有可能以十六进制字节%25或%63结尾的编码。在这一点上,它甚至看起来不像双UTF8编码,因为,澄清了%C3后面的字节需要将第一位设置为10xxxxxx

有些节目怎么能把重音变成“Ã后接%”以及“Ã后接c”?我想追溯misencoding的历史,这样我就可以试着想出一些方法来修复损坏的弦

还有一种可能性是,é一开始就不可能是é,但我不知道有人会在同一个短语中做出什么样的拼写错误,从而得到两个不同版本的é,最终被错误编码成两组完全不同的字节

额外的上下文细节:我在一个XML文件中找到这些被破坏的字符串。该文件没有头,因此假定为UTF-8。存在包含具有完美的字符的短语的节点,同时存在包含具有损坏的字符的短语的节点

据我所知,iconv和家人根本没有做任何事情来帮助这种情况


我现在考虑的几个后续问题是:我是否应该怀疑MySQL及其臭名昭著的懒惰字符集转码?是否有人在导出XML时编写了非常糟糕的自定义编码函数?

编码看起来有点奇怪:

从cinéma中获取utf-8编码的结果:

é=C3 A9

你得到了什么:

C3 83 25

因此,当对其进行双重编码时,应发生以下情况:

c3:Ã->c3 83

a9:)->c2 a9

但这并不能解释结果中的25

25:%


所以问题是,如果这是一次编码,那么像©这样的未知字符将被%替换,然后第二次编码?

它肯定是utf-8编码了两次。中间有一个神秘的代码页编码。不同的。一个在c中旋转。另一个很难猜测。把那个xml文件发回去,你不会想要它的。奇怪的是,同一个字符被转换成不同的字节,用不同的词。是的,我认为这是永远都无法恢复的。很抱歉肯定有一个双UTF-8在那里的某个地方,但非确定性的混乱,吐出ASCII的第二个字符既不是一个常见的,也不是一个补救的腐败。这些见解带来了清晰,我对此表示感谢。我最初的意思是“它不像通常的、可恢复的双UTF8编码”。我喜欢这种时髦的双重编码被描述为“把那个xml文件发回去,你不想要它。”:)从技术上讲,我觉得我的问题已经得到了回答。。。不知道如何处理空的“答案”部分。整个字符串的两个单词在重音“e”周围以不同的方式被弄乱了。在每一个“损坏”案例中,都会出现额外的字符:第一个案例中的“%”(十六进制25),后两个案例中的“c”(十六进制63)。我认为双重编码和代码页以及编码丢失的确切堆栈将在相当长的一段时间内继续存在。我怀疑MySQL的“ASCII、3字节UTF8和完整UTF8”方案和各种编程语言的“ASCII和UTF8”字符串中的字节正在被破坏。仅供参考:UTF-8(取决于使用的字符)始终是1-4字节编码。-因此,与“完整”UTF-8相比,没有3字节的UTF-8-更多信息,请查看我上面的示例,我还没有看到任何有效的UTF-8 3字节代码,在对字符进行双重编码的过程中。所以肯定有比双重编码更多的东西。同样奇怪的是,对于cinéma和télédiffusion,é结果被分成不同的字节。
cinÃ%ma
in HEX: 63 69 6E C3 83 25 6D 61
mapped: c  i  n  ---�----  m  a

tÃclÃcdiffusion
in HEX: 74 C3 83 63 6C C3 83 63 64 69 66 66 75 73 69 6F 6E
mapped: t  ---�---- l  ---�---- d  i  f  f  u  s  i  o  n