Python utf8编码问题

Python utf8编码问题,python,unicode,encoding,Python,Unicode,Encoding,我正在开发一个Python应用程序,在处理字符串时遇到了一些问题 这里有一个字符串“她不属于我的范围”(不带引号)。我将其存储在变量中,并尝试将其插入sqlite3数据库。但是,我得到了这个错误: sqlite3.ProgrammingError:除非使用可以解释8位ByTestRing的文本工厂(如text\u factory=str),否则不能使用8位ByTestRing。强烈建议您将应用程序切换到Unicode字符串 因此,我尝试将字符串转换为unicode。我试过这两种方法: new_s

我正在开发一个Python应用程序,在处理字符串时遇到了一些问题

这里有一个字符串“她不属于我的范围”(不带引号)。我将其存储在变量中,并尝试将其插入sqlite3数据库。但是,我得到了这个错误:

sqlite3.ProgrammingError:除非使用可以解释8位ByTestRing的文本工厂(如text\u factory=str),否则不能使用8位ByTestRing。强烈建议您将应用程序切换到Unicode字符串

因此,我尝试将字符串转换为unicode。我试过这两种方法:

new_str = unicode(old_str)
new_str = old_str.encode("utf8")
但这给了我另一个错误:

UnicodeDecodeError:“utf8”编解码器无法解码位置49:意外代码字节中的字节0x92


我被困在这里了。我做错了什么?

很简单。你假设它是UTF-8

>>> print 'She\x92s Out of My League'.decode('cp1252')
She’s Out of My League

那么,cp1252能与所有人一起工作吗?我在这里处理文件名。Windows和Unix上的文件名。是的,我明白了。我想要一些能处理文件名中允许的所有字符的东西。我应该选择哪一种?没有任何一种编码可以使用,除非您强制将编码输入到软件中。玩得开心
sys.getfilesystemencoding()
返回关于当前系统的文件系统编码的猜测,如果您给所有路径函数(例如,
os.path.join
os.listdir
)提供unicode参数,它们将返回unicode(使用此猜测编码)。此外,如果在UNIX系统上使用CP1252,您可能会考虑切换到UTF8以避免更大的问题。总是使用Unicode字符串来处理文件名(可能除了原始字节数组以外的任何其他内容都不需要文本解释)。然后,对于Windows和类Unix系统,Unicode文件名都将得到正确处理。请尝试使用
.decode
而不是
.encode
。您需要
旧的\u str.decode(encoding)
,并且不需要(事实上,您不能)将其编码回bytestring以便与sqlite一起使用,sqlite需要Unicode。