python2.7中,str和unicode是不同的類(lèi)型,給非ASCII編碼的文字和符號(hào)的使用造成了極大的困難
str是字符序列
unicode是字節(jié)序列
遇到類(lèi)似于 如下問(wèn)題的解決方案
UnicodeDecodeError: 'ascii' codec can't decode byte 0xe8 in position 0: ordinal not in range(128)
0.必須的編碼聲明
想要在代碼中涉及非ASCII編碼的處理,必須在程序的最前面指定
#coding:utf-8
來(lái)指示python文件本身的編碼為utf-8(或者其他編碼)
1.通用解決方案
在主函數(shù)中加入
import sys
reload(sys)
sys.setdefaultencoding('utf-8')
2.寫(xiě)入文件時(shí)不能編碼的解決方案
由于python2中的builtin的open函數(shù)不能指定字符集,所以,str格式的字符串必須先進(jìn)行編碼才能寫(xiě)入文件,編碼可根據(jù)需要指定
3.數(shù)據(jù)庫(kù)中亂碼的解決方案
首先要將數(shù)據(jù)庫(kù)本身的編碼調(diào)整為UTF-8
使用
SHOW VARIABLES LIKE "%char%";
查看數(shù)據(jù)庫(kù)本身的編碼
在連接數(shù)據(jù)庫(kù)的時(shí)候就指定好,使用MysqlDb模塊的時(shí)候,使用connet函數(shù)需指定charset='utf-8'
使用其他ORM或者數(shù)據(jù)庫(kù)框架的時(shí)候也應(yīng)在配置或者連接的函數(shù)中指定好字符集為UTF-8