python2.x解释器默认使用ASCII编码方法编码和解码。
通过sys**.getdefaultencoding()**获得python解释器默认编码方法。
编写python文件时,在文件第一行或第二行,声明python2.x解释器使用的编码方法,比如,#encoding=utf-8。
python文件声明的编码必须与python文件存储到磁盘的编码一致。
描述
python2.x获取当前编码环境。
python2.x解释器默认编码为ASCII。当前系统默认编码为cp936。
sys.getdefaultencoding():为python解释器默认编码方法。
locale.getdefaultlocale():为当前系统默认编码方法(转字节串写内存时使用,比如赋值)
示例
encodefile.py
import sys
import locale
print('defaultencoding:{}'.format(sys.getdefaultencoding()))
print('defaultlocale:{}'.format(locale.getdefaultlocale()))
python2.x执行结果
E:\documents\F盘>D:\Python27\python.exe E:\documents\F盘\encodefile.py
defaultencoding:ascii
defaultlocale:('zh_CN', 'cp936')
>>> '梯'
'\xcc\xdd'
>>> '梯'.decode('gbk')
u'\u68af'
>>> '梯'.decode('gbk').encode('utf-8')
'\xe6\xa2\xaf'
示例
encodefile.py的文件编码(存储到磁盘的编码)为utf-8,内容如下:
c='梯'
python2.x执行结果
E:\documents\F盘>D:\Python27\python.exe E:\documents\F盘\encodefile.py
File "E:\documents\F盘\encodefile.py", line 1
SyntaxError: Non-ASCII character '\xe6' in file E:\documents\F盘\encodefile.py on line 1, but no encoding declared; see http://python.org/dev/peps/pep-0263/ for details
描述
py文件的内容’梯’存储到磁盘的编码为utf-8,对应字节码为’\xe6\xa2\xaf’。
python2.x解释器读取py文件进行解析时使用的是ASCII编码方法进行解码,解析到字节码第1个字节’\xe6’时报错,没有对应的编码。
示例
encodefile.py的文件编码(存储到磁盘的编码)为ANSI即GBK,内容如下:
c='梯'
python2.x执行结果
E:\documents\F盘>D:\Python27\python.exe E:\documents\F盘\encodefile.py
File "E:\documents\F盘\encodefile.py", line 1
SyntaxError: Non-ASCII character '\xcc' in file E:\documents\F盘\encodefile.py on line 1, but no encoding declared; see http://python.org/dev/peps/pep-0263/ for details
描述
py文件的内容’梯’存储到磁盘的编码为ANSI,对应字节码为’\xcc\xdd’。
python2.x解释器读取py文件进行解析时使用的是ASCII编码方法进行解码,解析到字节码第1个字节’\xcc’时报错,没有对应的编码。
在py文件第1行或第2行添加编码说明,比如: # coding=utf-8。
python解释器会用py文件声明的编码方法进行解码。
示例
encodefile.py的文件编码(存储到磁盘的编码)为UTF-8,内容如下:
#encoding=gbk
c='梯'
python2.x执行结果
E:\documents\F盘>D:\Python27\python.exe E:\documents\F盘\encodefile.py
File "E:\documents\F盘\encodefile.py", line 2
SyntaxError: 'gbk' codec can't decode bytes in position 5-6: illegal multibyte sequence
描述
py文件的内容’梯’存储到磁盘的编码为utf-8,对应字节码为’\xe6\xa2\xaf’。
python2.x解释器读取py文件进行解析时使用的是gbk编码方法进行解码,解析到字节码第5-6个字节’\xaf’时报错,非法的多字节序列,gbk编码1个中文占2个字节,解析到最后’\xaf’时,范围大于127,又是单个的,所以报非法多余字节。
示例
encodefile.py的文件编码(存储到磁盘的编码)为gbk,内容如下:
#encoding=utf-8
c='̝梯'
print(c)
python2.x执行结果
E:\documents\F盘>D:\Python27\python.exe E:\documents\F盘\encodefile.py
梯
描述
py文件的内容’梯’存储到磁盘的编码为ANSI,对应字节码为’\xcc\xdd’。
python2.x解释器读取py文件进行解析时使用的是utf-8编码方法进行解码,utf-8兼容gbk,所以可以正确解析执行。
示例
encodefile.py的文件编码(存储到磁盘的编码)为utf-8,内容如下:
#encoding=utf-8
c='̝梯'
print(c)
python2.x执行结果
E:\documents\F盘>D:\Python27\python.exe E:\documents\F盘\encodefile.py
梯
描述
py文件的内容’梯’存储到磁盘的编码为utf-8,对应字节码为’\xe6\xa2\xaf’。
python2.x解释器读取py文件进行解析时使用的是py文件声明的编码(#encoding=utf-8
)utf-8编码方法进行解码,与存储编码相同,所以可以正确解析执行。