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编码方法进行解码,与存储编码相同,所以可以正确解析执行。

你可能感兴趣的:(python,python)