这就是我得到的。
ProgrammingError:除非使用可解释8位字节串的text_factory(如text_factory = str),否则不得使用8位字节串。强烈建议您只需将应用程序切换为Unicode字符串。
这是我抛出错误的代码行。
cursor.execute("SELECT path, filename, size, state, modified, created FROM file WHERE path=? and filename=?", (path,filename))
我在这里搜索也尝试了其他方式。 并使我的代码像。
cursor.execute("SELECT path, filename, size, state, modified, created FROM file WHERE path=? and filename=?", (path.decode('utf-8'),filename.decode('utf-8')))
但现在给出了错误:
UnicodeDecodeError: 'utf8' codec can't decode byte 0xf6 in position 1: invalid start byte
如何解决?
答案 0 :(得分:0)
解码8bits字符串时,必须使用其实际编码,而不是数据库编码。
如果您使用的是latin1,那么(在2.7.3上测试):
>>> txt = "\xe9\xe8"
>>> txt
'\xe9\xe8'
>>> print txt
éè
>>> utxt = txt.decode("latin1")
>>> utxt
u'\xe9\xe8'
>>> print utxt
éè
所以你应该写:
cursor.execute("SELECT path, filename, size, state, modified, created FROM file WHERE path=? and filename=?",
(path.decode('latin1'),filename.decode('latin1')))
用您的编码替换latin1
。