使用python从sqlite db读取unicode

时间:2012-02-05 09:32:32

标签: 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)

在convert方法中产生以下错误消息。

  

exceptions.UnicodeDecodeError:'ascii'编解码器无法解码字节0xe0   位置0:序数不在范围内(128)

如果数据库内容为“ஜௌஜௌஜௌ”,则输出应为“n \ [sn \ [sn \ [s”

文档建议在创建unicode字符串时使用ignore或replace来避免错误。

当迭代改变如下时:

for row in cursor.fetchone():
    print convert(unicode(row, errors='replace'))

它返回

  

exceptions.TypeError:不支持解码Unicode

通知该行已经是unicode。

对此有任何启发,以使其工作,非常感谢。提前谢谢。

1 个答案:

答案 0 :(得分:2)

content = content.replace("ஜௌ", "n\[s");

建议你的意思是:

content = content.replace(u'ஜௌ', ur'n\[s');

或者对于文件编码不确定的安全性:

content = content.replace(u'\u0B9C\u0BCC', ur'n\[s');

您拥有的内容已经是Unicode,因此您应该对其进行Unicode字符串替换。没有"ஜௌ"的{​​{1}}是一个字节字符串,表示某些编码中依赖于源文件字符集的字符。 (字节字符串只能在最明确的情况下与Unicode字符串一起平滑地工作,这适用于ASCII字符。)

u - 字符串表示不必担心包含裸反斜杠。)