我目前在sqlite数据库中持久存在文件名以用于我自己的目的.每当我尝试插入具有特殊字符的文件(如é等)时,它会抛出以下错误:
pysqlite2.dbapi2.ProgrammingError: You must not use 8-bit bytestrings unless you use a text_factory that can interpret 8-bit bytestrings (like text_factory = str). It is highly recommended that you instead just switch your application to Unicode strings.
当我通过使用unicode方法将发送到pysqlite的值包装为"将我的应用程序切换到Unicode字符串"时unicode(filename)
,它会抛出此错误:
UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 66: ordinal not in range(128)
我有什么办法可以摆脱这个吗?修改我的所有文件以符合不是一个选项.
更新
如果我通过解码文本filename.decode("utf-8")
,我仍然得到上面的ProgrammingError.
我的实际代码如下所示:
cursor.execute("select * from musiclibrary where absolutepath = ?;", [filename.decode("utf-8")])
我的代码应该是什么样的?
您需要指定filename
转换为Unicode 的编码,例如:filename.decode('utf-8')
.只需使用unicode(...)
选择控制台编码,这通常是不可靠的(并且经常ascii
).