在python中,操作中文字符串时经常会出现字符编码错误的情况。大部分问题是由于当前环境默认字符编码是ascii的问题(尤其是3版本以前的python)。
以下是查询当前环境默认字符编码的语句。
# -*- encoding==utf-8 -*-
在python3之前经常每个.py文件的第一行都会看到这个,它的实际作用是将当前py文件的编码格式设置为utf-8,如果没有这一行注释代码, 那么在执行当前的.py文件时候,只要该.py文件中有中文汉字就会ascii报错。
内容
import sys
>>>sys.getdefaultencoding()
'ascii'
在python27版本中,当前环境的默认编码为ascii,每当你创建一个字符串str对象时,它的编码格式为默认的ascii格式。 可以用以下语句查询字符串的编码。
import chardet
a = '测试'
chardet.detect(a)
如果在执行字符串操作时候报了相关的ascii 错误,可以在该文件中添加以下语句,使当前系统的默认编码修改为utf-8;
import sys
reload(sys)
sys.setdefaultencoding("utf-8")
python3之后的版本不需要,已经默认字符编码是utf-8
>>>sys.stdout.encoding
'UTF-8'
在print一个中文字符串时候有时候也会报ascii的编码错误,这时候需要注意查看一下标准输出的默认字符编码是否不是utf-8 (一般所有的python环境标准输出的字符编码都是默认的utf-8,我在使用docker基于ubuntu16版本装的python35上鬼一样遇到这种问题了)
如果不是utf-8,就在该文件下加入以下内容:
import sys
import codecs
sys.stdout = codecs.getwriter("utf-8")(sys.stdout.detach())