我尝试编写一个脚本,通过创建随机的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
应该有效,因为0xc0
以110
开头而0xaf
以{{1}开头}}
这是我的python脚本:
10
答案 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?