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