python乱码浅析-乱码解码及数据库编码配置

来源:互联网 发布:人工智能联盟 编辑:程序博客网 时间:2024/04/28 14:51

在代码中需要打印中文的时候容易出现乱码,下面简单提供几个思路去解决打印乱码的问题。(环境python2.7)

乱码解码方法:

(1)使用chardet的detect函数去检测:

import time

import chardet

mystr=time.strftime('%Z')print chardet.detect(mystr)print mystr.decode('gbk')
结果:
{'confidence': 0.99, 'encoding': 'GB2312'}中国标准时间
打印的第一行就是检测结果,告诉我们是gbk编码
然后我们用gbk解码就可以了
配合chardet解码:
x.decode(chardet.detect(x)['encoding'])
(2)经验,这个方法比较快,但是适合老手:
print [mystr]
['\xd6\xd0\xb9\xfa\xb1\xea\xd7\xbc\xca\xb1\xbc\xe4']

如上述代码,我们把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写进去的



0 0
原创粉丝点击