python2.x文件声明解释器编码方法
1 python2.x文件声明解释器编码方法
python2.x解释器默认使用ASCII编码方法编码和解码。
通过sys**.getdefaultencoding()**获得python解释器默认编码方法。
编写python文件时,在文件第一行或第二行,声明python2.x解释器使用的编码方法,比如,#encoding=utf-8。
python文件声明的编码必须与python文件存储到磁盘的编码一致。
1.1 获取当前编码环境
描述
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')
1.2 通过idle获取梯的字节码
>>> '梯'
'\xcc\xdd'
>>> '梯'.decode('gbk')
u'\u68af'
>>> '梯'.decode('gbk').encode('utf-8')
'\xe6\xa2\xaf'
1.3 默认编码执行带中文py文件报错
1.3.1 文件编码为utf-8
示例
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’时报错,没有对应的编码。
1.3.2 文件编码为ANSI(GBK)
示例
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’时报错,没有对应的编码。
1.4 指定编码执行带中文py文件
在py文件第1行或第2行添加编码说明,比如: # coding=utf-8。
python解释器会用py文件声明的编码方法进行解码。
1.4.1 指定编码gbk与文件编码utf8
示例
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,又是单个的,所以报非法多余字节。
1.4.2 指定编码utf8与文件编码gbk
示例
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,所以可以正确解析执行。
1.4.3 指定编码与文件编码相同utf8
示例
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编码方法进行解码,与存储编码相同,所以可以正确解析执行。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!