在代码中需要打印中文的时候容易出现乱码,下面简单提供几个思路去解决打印乱码的问题。(环境python2.7)
乱码解码方法:
(1)使用chardet的detect函数去检测:
import time
import chardet
mystr=time.strftime('%Z') print chardet.detect(mystr) print mystr.decode('gbk') print [mystr]
结果:
{'confidence': 0.99, 'encoding': 'GB2312'}
中国标准时间
['\xd6\xd0\xb9\xfa\xb1\xea\xd7\xbc\xca\xb1\xbc\xe4']
打印的第一行就是检测结果,告诉我们是gbk编码
然后我们用gbk解码就可以了
(2)经验,这个方法比较快,但是适合老手:
如上述代码,我们把mystr放入列表,就能看到mystr的编码,有经验的老手可以看出大致是哪种编码,有空大家可以编码utf8和gbk看看,是这两种的可能性大点,如果你的数据来自mysql,也有可能是latin(个人经验)。
这里讲一个个人的小经验吧:我发现win下的中文大多是gbk编码的,你可以看看你的cmd编码,是gbk的,还有通过os.listdir()获取的系统路径,还有这次的用time获取的时区,都是gbk,所以有时从win获取的一些中文信息,可以直接用gbk编码试试。
(3)你要是不想要chardet或者说chardet不适合你的话,只能用for循环去挨个decode试试了,我看网上有说这种方法的,你可以做一个编码的list,然后for循环一遍找出对应的编码。
2、关于数据库乱码(mysql):
数据库编码设置主要在这几个地方:数据库编码、库表编码、字段编码、连接数据库编码,这几个里面有的默认是utf8,下面说说这几个编码的设置吧:
创建库时指定编码:create database testdb default charset utf8
修改库的编码: ALTER DATABASE `testtable` DEFAULT CHARACTER SET utf8
修改表的编码:ALTER TABLE `testtable` DEFAULT CHARACTER SET utf8
修改字段的编码:
ALTER TABLE `tablename` CHANGE `dd` `dd` VARCHAR( 45 ) CHARACTER SET utf8 NOT NULL
下面是连接处编码设置,这个有时会忘(不过这个貌似默认的是utf8,不记得了。。。):
import MySQLdb as db
conn=db.connect('127.0.0.1','root','password','sae',charset='utf8')
到这为止,你读取数据库内容的编码问题大致都解决了,但是你读出来可能还是乱码,原因可能有两点:
一是你把文件正确的读回python程序后没有进行正确的编解码处理
二是数据库的内容更本来就不是用utf8写进去的