使用Python从SQLite数据库读取Unicode

1 投票
1 回答
1537 浏览
提问于 2025-04-17 12:21

存储在数据库中的数据是用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字符串的意思是你不需要担心里面有单独的反斜杠。)

撰写回答