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
- python乱码浅析-乱码解码及数据库编码配置
- JSP乱码及编码解码问题
- 编码、解码、乱码原理
- Java字符编码及解码乱码研究---背景知识
- 解决编码解码乱码问题
- 【13】编码、解码与乱码
- 编码,解码,乱码,问题详解
- 编码,解码,乱码,问题详解
- 编码,解码,乱码,问题详解
- get请求乱码 编码解码
- 编码解码,解决乱码问题
- python编码介绍及中文乱码过滤
- python字符串编码及乱码解决方案
- python 编码 乱码问题
- 中文乱码(编码解码)问题的解决办法
- java中 编码 解码 乱码 解惑
- 编码再解码解决乱码问题
- 编码,解码,乱码,转码的理解。
- 【OpenCV】基于图像处理和模式识别的火灾检测方法
- protobuf的C简单的代码例子(总结)
- 邮件地址的正则表达式
- svn
- C++ Primer 学习笔记_68_面向对象编程 -构造函数跟复制控制[续]
- python乱码浅析-乱码解码及数据库编码配置
- C++ Primer 学习笔记_69_面向对象编程 -继承景况下的类作用域
- C++ Primer 学习笔记_70_面向对象编程 -纯虚函数、器皿与继承
- JVM运行时数据区域
- STM32之时钟
- 常用的js小功能
- 【连载】关系型数据库是如何工作的?(6) - Hash表
- map用法
- init