admin管理员组文章数量:1611190
Python2.x
的默认字符集编码是ASCII
,包含的字符有限,因此会有很多字符集的问题。
问题原因
真相只有一个:.py
文件的某个字节,超出了ASCII
表达的范围。
每个字节是8 bit
、理论上可以表示256个字符。但标准ASCII
编码中最高位作为奇偶校验位、并未用来表示具体字符,所以只能表示128个字符。所以如果是其他字符集编码后的字节,是可能超出ASCII
能表示的范围的(有128个,可能性很高)。 这就是Python2.x
这个解码失败、不在范围内的来由
关于多字节字符多说两句:
- 同一个字符,采用不同的编码方式,底层对应的字节也不同; 所以用
UTF-8
编码过的字符,GBK
是不能解码成原来的字符的,尽管两种方式都能编码多字节字符;- 多字节字符,显示的一个字符、但底层是用多个字节存储的。
回到问题上来。我们代码中的字符,在我们写下后,就按指定的字符集编码后,以二进制形式存放到文件中。
比如用PyCharm或文本编辑器,都会指定.py文件的字符集编码
在运行代码时,Python解释器会读取文件、转换成字节码、然后执行字节码。
Python是解释型语言,默认是直接执行源文件。而Java是比较特殊的编
本文标签: ASCIICodecUnicodeDecodeErrorDecodeordinal
版权声明:本文标题:Python2.x编码问题:UnicodeDecodeError: 'ascii' codec can't decode byte in position : ordinal not in range 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://m.elefans.com/xitong/1728607516a1165642.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论