最近遇到一个乱码的问题,在用SQLite Expert打开SQLite数据库时,如果记录中有中文,通常显示乱码,而偶又很想知道这个结乱码的是什么。于是就想到用python读取这些数据是否能显示正常呢?用以下代码进行了测试:
# -*- coding: UTF-8 –*-
import sqlite3
conn=sqlite3.connect('e:\test.db')
with conn:
curs=conn.cursor()
curs.execute("XXX")#XXX为SQL查询语句
datas=curs.fetchall()
fout=file('dbout.txt','w')
for data in datas:
print data[0],data[1],data[2],data[3]
fout.write("%s\t%s\t%s\t%s\n" % (str(data[0]),str(data[1]),str(data[2]),str(data[3])))
fout.close()
结果产生如下异常提示:
OperationalError: Could not decode to UTF-8 column 'name' with text '活载'
看来可能是编码的问题,而且python肯定能正常读取,于进一点Google之,发现只需要在连接后添加conn.text_factory = str
即可正常执行。此语句设置python使用什么类型来处理sqlite3的text类型,默认是unicode,应该是python尝试将中文的text转成unicode时产生了错误。正常的代码段如下:
#...
conn=sqlite3.connect('e:\test.db')
conn.text_factory = str #注意在连接后添加此语句
#...
至于SQLite Expert中如何正常显示,偶没有找到办法,不过不影响使用。