Python 2.6.6编码错误

时间:2015-06-04 10:21:16

标签: python utf-8

这就是我得到的。

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

如何解决?

1 个答案:

答案 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