使用Python从SQLite数据库读取Unicode
存储在数据库中的数据是用unicode格式的,现在需要把它取出来并转换成另一种形式。
下面这段代码
def convert(content):
content = content.replace("ஜௌ", "n\[s");
return content;
mydatabase = "database.db"
connection = sqlite3.connect(mydatabase)
cursor = connection.cursor()
query = ''' select unicode_data from table1'''
cursor.execute(query)
for row in cursor.fetchone():
print convert(row)
在转换方法中会出现以下错误信息。
exceptions.UnicodeDecodeError: 'ascii' 编码无法解码字节 0xe0 在位置 0: 序号不在范围内(128)
如果数据库里的内容是"ஜௌஜௌஜௌ",那么输出应该是"n\[sn\[sn\[s"。
文档建议在创建unicode字符串时使用忽略或替换的方法来避免这个错误。
当迭代方式改成如下:
for row in cursor.fetchone():
print convert(unicode(row, errors='replace'))
它会返回
exceptions.TypeError: 不支持解码Unicode
这说明这一行已经是unicode格式了。
如果能提供一些帮助让这个问题解决,那将非常感谢。提前谢谢你。
1 个回答
2
content = content.replace("ஜௌ", "n\[s");
建议你是想说:
content = content.replace(u'ஜௌ', ur'n\[s');
或者为了安全起见,当你不确定文件的编码时:
content = content.replace(u'\u0B9C\u0BCC', ur'n\[s');
你手上的内容已经是Unicode格式了,所以你应该在上面进行Unicode字符串的替换。"ஜௌ"
如果没有u
的话,就是一串字节,这些字节根据你源文件的字符集代表了那些字符。(字节字符串和Unicode字符串只有在最简单的情况下才能顺利一起使用,那就是ASCII字符。)
(r
字符串的意思是你不需要担心里面有单独的反斜杠。)