ale*_*n13 2 python unicode utf-8 mojibake
我有一个包含西班牙语文本的 UTF-8 文件,某些带有重音符号的单词在某些软件中显示不正确。
\n\n我相信我的文件是正确的。例如,名称“JES\xc3\x9aS\”被编码为4A 45 53 C3 9A 53.
>>> b\'\\x4A\\x45\\x53\\xC3\\x9A\\x53\'.decode(\'utf-8\')\n\'JES\xc3\x9aS\'\nRun Code Online (Sandbox Code Playgroud)\n\nc39a\\u00da根据http://www.fileformat.info/info/unicode/char/00da/index.htm ,是 的正确 UTF-8 编码。
那么,为什么有些软件渲染不正确呢?
\n这是使用 Latin-1 编码而不是 UTF-8 的结果。两字节 UTF-8 序列被错误地解码为两个字符。
\n\n>>> \'\xc3\x9a\'.encode(\'utf-8\').decode(\'latin-1\')\n\'\xc3\x83\\x9a\'\n>>> \'\xc3\x89\'.encode(\'utf-8\').decode(\'latin-1\')\n\'\xc3\x83\\x89\'\nRun Code Online (Sandbox Code Playgroud)\n\nhttp://www.fileformat.info/info/unicode/char/9a/index.htm \n http://www.fileformat.info/info/unicode/char/89/index.htm
\n\n这两个字符都是控制字符,因此它们在不同的软件中可能会显示,也可能不会显示。
\n\n此外,重复不正确的编码-解码会进一步破坏文本:
\n\n>> \'\xc3\x9a\'.encode(\'utf-8\').decode(\'latin-1\').encode(\'utf-8\').decode(\'latin-1\')\n\'\xc3\x83\\x83\xc3\x82\\x9a\'\nRun Code Online (Sandbox Code Playgroud)\n\n更新:如果您看到实际的 \xc5\xa1 和 \xe2\x80\xb0 (而不是不可见的控制字符),则错误的编码是 Windows-1252。
\n\nWindows-1252是ISO 8859-1的超集,可打印字符为 0x80-0x9f。
\n\n在 Windows-1252 中,代码点 0x9a 和 0x89 对应于字符\xc5\xa1和\xe2\x80\xb0:\n http://www.fileformat.info/info/unicode/char/0161/index.htm \n http://www.fileformat.info/info /unicode/char/2030/index.htm
>>> \'\xc3\x9a\'.encode(\'utf-8\').decode(\'Windows-1252\')\n\'\xc3\x83\xc5\xa1\'\n>>> \'\xc3\x89\'.encode(\'utf-8\').decode(\'Windows-1252\')\n\'\xc3\x83\xe2\x80\xb0\'\nRun Code Online (Sandbox Code Playgroud)\n
| 归档时间: |
|
| 查看次数: |
7211 次 |
| 最近记录: |