插入中文内容到本地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()