我对PATH变量进行编码并将其插入到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时出现的错误
编程错误:除非使用可以解释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*
3条答案
按热度按时间mqkwyuun1#
str
是以字节为单位的文本表示,unicode
是以字符为单位的文本表示。您可以将文本从字节解码为Unicode,并使用某种编码将Unicode编码为字节。
即:
str
被重命名为bytes
,unicode
被重命名为str
。qojgxg4l2#
您错误地使用了
encode("utf-8")
。Python字节字符串(str
类型)有编码,而Unicode没有。可以使用uni.encode(encoding)
将Unicode字符串转换为Python字节字符串,使用s.decode(encoding)
(或等效的unicode(s, encoding)
)将字节字符串转换为Unicode字符串。如果
fullFilePath
和path
当前是str
类型,您应该弄清楚它们是如何编码的。例如,如果当前编码为utf-8,您将使用:如果这不能解决它,实际问题可能是您没有在
execute()
调用中使用Unicode字符串,请尝试将其更改为以下内容:agyaoht73#
确保在从外壳运行脚本之前正确设置了区域设置,例如
文档:
man locale
,man setlocale
。