python:UnicodeDecodeError:'utf8'编解码器无法解码位置0的字节0xc0:无效的起始字节

时间:2014-05-21 00:34:46

标签: python unicode encoding utf-8

我尝试编写一个脚本,通过创建随机的utf-8编码字符串然后将其解码为unicode来生成随机unicode。它适用于单个字节,但有两个字节就失败了。

例如,如果我在python shell中运行以下命令:

>>> a = str()

>>> a += chr(0xc0) + chr(0xaf)

>>> print a.decode('utf-8')

UnicodeDecodeError: 'utf8' codec can't decode byte 0xc0 in position 0: invalid start byte

根据utf-8方案https://en.wikipedia.org/wiki/UTF-8#Description,字节序列0xc0 0xaf应该有效,因为0xc0110开头而0xaf以{{1}开头}}


这是我的python脚本:

10

2 个答案:

答案 0 :(得分:5)

这确实是无效的UTF-8。在UTF-8中,只能使用两个字节对U + 0080到U + 07FF范围内的代码点进行编码。更仔细地阅读维基百科文章,你会看到同样的事情。因此,字节0xc0可能不会出现在UTF-8中。 0xc1也是如此。

某些UTF-8解码器错误地将C0 AF等序列解码为有效的UTF-8,这导致过去存在安全漏洞。

答案 1 :(得分:2)

找到一个实际接受0xc0的标准:encoding="ISO-8859-1"
来自https://stackoverflow.com/a/27456542/4355695

但是这需要确保文件的其余部分没有unicode字符,所以这不是问题的确切答案,但对于像我这样没有任何人的人来说可能会有所帮助无论如何unicode chars在他们的文件中只是想让python加载该死的东西而且utf-8和ascii编码都错了。

有关ISO-8859-1的更多信息:What is the difference between UTF-8 and ISO-8859-1?