python2.7中,str和unicode是不同的类型,给非ASCII编码的文字和符号的使用造成了极大的困难
str是字符序列
unicode是字节序列
遇到类似于 如下问题的解决方案
UnicodeDecodeError: 'ascii' codec can't decode byte 0xe8 in position 0: ordinal not in range(128)
0.必须的编码声明
想要在代码中涉及非ASCII编码的处理,必须在程序的最前面指定
#coding:utf-8
来指示python文件本身的编码为utf-8(或者其他编码)
1.通用解决方案
在主函数中加入
import sys
reload(sys)
sys.setdefaultencoding('utf-8')
2.写入文件时不能编码的解决方案
由于python2中的builtin的open函数不能指定字符集,所以,str格式的字符串必须先进行编码才能写入文件,编码可根据需要指定
3.数据库中乱码的解决方案
首先要将数据库本身的编码调整为UTF-8
使用
SHOW VARIABLES LIKE "%char%";
查看数据库本身的编码
在连接数据库的时候就指定好,使用MysqlDb模块的时候,使用connet函数需指定charset='utf-8'
使用其他ORM或者数据库框架的时候也应在配置或者连接的函数中指定好字符集为UTF-8
网友评论