您的位置:首页 > 编程语言 > Python开发

python编码问题、乱码问题

2015-12-31 17:24 567 查看
插入中文内容到本地MySQL数据库乱码问题的解决

首先我查到一条插入数据库的sql语句,如下:

title = '中文'

sql = '''INSERT INTO articles(name, url) VALUES ('%s', '%s')''', (title, url)

很悲催的是我失败了,通过打印sql,发现title并不是我要的‘中文’

结果如下:

("INSERT INTO articles(name,url) VALUES ('%s', '%s')", ('\xe4\xb8\xad\xe6\x96\x8

7', u'/cn/news/2015/12/mobile-fragmentation-issues'))

接下来我就不停的decode和encode。。。。

当然在解决编码问题之前,最原则的就是要搞清你的内容到底是什么编码方式,然后再进行上述操作,今天主要讲的是我的一个很巧妙的解决,请看:

sql = '''INSERT INTO articles(name, url) VALUES ('%s', '%s')''' %  (title, url)

程序中其他编码问题

第一步:确定你的数据是什么类型,有两种方式可以采用——1.type(data)
/
2.isinstance(data, unicode)也就是说这种方式只能判断你的data是不是Unicode

python的内部是使用unicode来处理的,当python要做编码转换的时候,应该先转化为Unicode,再转化成目的编码,转换过程是这样的:
        原有编码 -> 内部编码 -> 目的编码

第二步:在python编码前两行加入下面的编码信息

#-*- coding: utf8 -*-

此时便可正常打印输出中文字符串

但是仅仅这样并不足够,尤其在你做爬虫程序,从页面爬了很多中文字符进来后,打印的不是乱码就是\xx这样的东西,那如果是python2,我们只需要在import模块时,加上如下的代码,python3中就不需要了。

import sys

reload(sys) 

sys.setdefaultencoding('utf8')

此外如果是从文件读取,尽量不要使用file.open打开文件,而是采用codecs.open,这样可以指定解码的类型

input文件(gbk, utf-8...)   ----decode----->   unicode  -------encode------> output文件(gbk, utf-8...)

很多文本挖掘的package是在unicode上边做事的,比如nltk. 所以开始读入文件后要decode为unicode格式,可以通过下边两步:

f=codecs.open(XXX, encoding='utf-8')

content=f.read()
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: