我在编码路径变量并将其插入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类型,但是当路径变量的类型为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