Python 编码问题
问题来源
Python3 中编码只存在于文件中, 读取文件进内存后统一都是 unicode。
如果读取文件时指定的编码与文件本身的编码不一致, 将导致编码错误而无法正确解析。
各个操作系统读取文件时采用的默认编码
Mac 操作系统和 Linux 操作系统默认字符编码都是 utf-8, 而 Windows 则根据不同地区使用不同的编码方式。
读取非 utf-8 的文件
在 Python3 中编码只存在于文件中, 读取后统一都是 unicode, 所以打开文件的时候就要指定编码, 而不是读取后指定。
exec(open('C:/Users/xxx/test.py', encoding="gbk").read())
一个有趣的问题, 在 windows 上
open(file, mode)
默认采用的是 GBK (中国地区), 而
python3 xx.py
采用的却是 utf-8
推荐使用 utf-8 编码
由于 utf-8 编码可以编码世界上所有国家语言中的字符, 因此我们可以放心地在文件使用 utf-8 编码格式, 相应的, 读取的时候必须使用 utf-8 编码读取。 以下是一些注意事项。
我很懒, 就想创建文件时默认使用 utf-8 怎么办?
借助于编辑器(IDE)时必须在文件头指定编码让编辑器识别, 以修改文件编码。 IDE 在全是 ASCII 字符时还是会使用系统默认的编码的, 不会去改变它。
使用 IDE 时在文件头指定编码:
- 带等号
#coding=<encoding name>
- ==带冒号==(大多数编辑器都可以正确识别的)推荐用这种
# -*- coding: <encoding name> -*-
- vim 的
# vim: set fileencoding=<encoding name> :
使用 IDE 时的推荐方式
在 Emacs 25.2.1 版本编辑器中, 使用 #coding=
附: 查看文件编码的方法
Windows 操作系统下, 可以使用记事本打开文件, 一次点击 文件->另存为, 即可看到编码方式, 默认是 ANSI(根据用户所在地区使用不同编码方案, 如中国区采用 GBK, 美国 ASCII)。
附:windows 下的一些问题
由于 windows 系统采用的是 ANSI(美国标准) 的编码方案, 中国地区为 gbk 编码,
而有的 python 库使用 ASCII 编码, 含有中文的 py 脚本会因执行
exec(file, mode)
encoding="ANSI" (ANSI 在中国是 GBK)而产生解码错误。
发表评论
评论列表, 共 0 条评论