sta*_*cke 5 unicode encoding utf-8 character-encoding
什么样的错误编码“堆栈”会为字符串“cin\xc3\xa9ma t\xc3\xa9l\xc3\xa9diffusion”产生以下奇怪的字节?(我省略了空格字符,十六进制:20)
\n\ncin\xc3\x83%ma\nin HEX: 63 69 6E C3 83 25 6D 61\nmapped: c i n ---\xef\xbf\xbd---- m a\n\nt\xc3\x83cl\xc3\x83cdiffusion\nin HEX: 74 C3 83 63 6C C3 83 63 64 69 66 66 75 73 69 6F 6E\nmapped: t ---\xef\xbf\xbd---- l ---\xef\xbf\xbd---- d i f f u s i o n\nRun Code Online (Sandbox Code Playgroud)\n\n---\xef\xbf\xbd---- 部分表示不正确的字节。
\n\n我考虑过“如果转码混乱怎么办?双重编码怎么样?”,但是,看看http://www.fileformat.info/info/unicode/char/00e9/charset_support.htm(以及代码页版本),我注意到没有任何编码可能以十六进制字节 %25 或 %63 结尾 \xc3\xa9 。此时它甚至看起来不像双 UTF8 编码,因为http://en.wikipedia.org/wiki/UTF-8澄清了 %C3 之后的字节需要将第一位设置为10xxxxxx。
\n\n某些程序如何将重音\xc3\xa9转换为“ \xc3\x83后跟% ”以及“ \xc3\x83后跟c ”?我想追溯错误编码的历史,以便我可以尝试想出一些可以采取措施修复损坏的字符串的方法。
\n\n也存在这样的可能性:\xc3\xa9本来就不是\xc3\xa9,但我无法理解有人在同一个短语中犯了什么样的拼写错误,以获得两个不同版本的\ xc3\xa9最终被错误编码成两个完全不同的字节集。
\n\n额外的上下文详细信息:我在 XML 文件中找到了这些损坏的字符串。该文件没有<?xml version="1.0"?>标头,因此假定它是 UTF-8。存在包含具有完美的\xc3\xa9字符的短语的节点,同时存在包含具有损坏的\xc3\xa9字符的短语的节点。
\n\n据我尝试,iconv -and-family 根本没有做任何事情来帮助解决这种情况。
\n\n我现在持有的几个后续考虑因素是:我是否应该怀疑 MySQL 及其臭名昭著的懒惰字符集转码?难道是某人在导出 XML 时编写的自定义编码函数写得很糟糕?
\n编码看起来有点奇怪:
\n\n从 cin\xc3\xa9ma 中获取 \xc3\xa9 结果为 utf-8 编码:
\n\n\n\n\n\xc3\xa9 = C3 A9
\n
你在哪里得到:
\n\n\n\n\nC3 83 25
\n
因此,当它被双重编码时,应该发生以下情况:
\n\n\n\n\nc3: \xc3\x83 -> c3 83
\n\na9: \xc2\xa9 -> c2 a9
\n
但这无法解释结果中的 25。
\n\n\n\n\n25:%
\n
那么问题是,如果编码一次,那么像\xc2\xa9这样的未知字符将被替换为%,然后进行第二次编码?
\n