我在对路径变量进行编码并将其插入SQLite数据库时遇到问题。我试图用无济于事的encode(“ utf-8”)函数解决此问题。然后,我使用unicode()函数为我提供unicode类型。
print type(path) # <type 'unicode'>
path = path.replace("one", "two") # <type 'str'>
path = path.encode("utf-8") # <type 'str'> strange
path = unicode(path) # <type 'unicode'>
最终我获得了unicode类型,但是当path变量的类型为str时,仍然出现相同的错误
sqlite3.ProgrammingError:除非使用可以解释8位字节串的text_factory(如text_factory = str),否则不得使用8位字节串。强烈建议您改为将应用程序切换为Unicode字符串。
您能帮我解决此错误,并解释encode("utf-8")
和unicode()
功能的正确用法吗?我经常为此而斗争。
编辑:
此execute()语句引发错误:
cur.execute("update docs set path = :fullFilePath where path = :path", locals())
我忘记更改具有相同问题的fullFilePath变量的编码,但是现在我很困惑。我应该只使用unicode()还是encode(“ utf-8”)还是两者都使用?
我不能用
fullFilePath = unicode(fullFilePath.encode("utf-8"))
因为它会引发此错误:
UnicodeDecodeError:'ascii'编解码器无法解码位置32的字节0xc5:序数不在范围内(128)
Python版本是2.7.2