Python 如何从unicode文本创建unicode实例

Python 如何从unicode文本创建unicode实例,python,python-2.7,unicode,encoding,unicode-literals,Python,Python 2.7,Unicode,Encoding,Unicode Literals,由于C扩展中的一些错误,我使用str实例获取unicode数据,或者按照顺序,str完全没有编码和unicode文本 例如,这是一个有效的unicode文本 >>> u'\xa1Se educado!' UTF-8编码的str是: >>> '\xc2\xa1Se educado!' 但是,我得到了一个带有unicode文本的str: >>> '\xa1Se educado!' 我需要从中创建一个unicode实例。使用unicode()

由于C扩展中的一些错误,我使用str实例获取unicode数据,或者按照顺序,str完全没有编码和unicode文本

例如,这是一个有效的unicode文本

>>> u'\xa1Se educado!'
UTF-8编码的str是:

>>> '\xc2\xa1Se educado!'
但是,我得到了一个带有unicode文本的str:

>>> '\xa1Se educado!'

我需要从中创建一个unicode实例。使用
unicode()
不起作用,因为它需要编码。我想,
'.join(unichr(ord(x))代表s中的x)
满足了我的需要,但它真的很难看。必须有更好的解决办法。有什么想法吗?

正如我所怀疑的,必须有一种方法可以用python对unicode使用的任何“编码”来解码它,那就是
原始unicode\u escape

>>> unicode('\xa1Se educado!', 'raw_unicode_escape')
u'\xa1Se educado!'
我得到一个带有unicode文本的str:
'\xa1Se educado!'

不太可能,
\xa1
不是特定于Unicode的转义<字节字符串中的code>\xa1
表示字节号161,Unicode字符串中的
\xa1
表示字符(代码点)号161,与
\u00A1
相同

您拥有的是一个包含ISO-8859-1编码的字节字符串,
“Se educado!”而不是UTF-8编码。在ISO-8859-1编码中,每个字节号恰好与相同代码点号的Unicode字符匹配。要将ISO-8859-1字节字符串解码为Unicode字符串,请使用:

>>> '\xa1Se educado!'.decode('iso-8859-1')
u'\xa1Se educado!'
虽然实际上,如果您使用的是Windows,那么编码可能是代码页1252(
“Windows-1252”
),而不是ISO-8859-1。它们的编码相似,但不完全相同。代码页1252是默认的“ANSI”代码页,Windows用于西欧和美国地区的非Unicode应用程序。如果您是从同一台计算机上运行的Windows非Unicode应用程序获取此数据,则应使用编码
'mbcs'
对其进行解码,该编码对应于特定于语言环境的默认代码页


这些是无法保存所有Unicode字符的传统编码。您可能会发现C扩展根本无法处理当前代码页集之外的字符。

您使用的是哪种版本的Python?造成问题的扩展是什么?你能在那里纠正它吗?Python2.7。这个扩展不是真的相关。该示例很差,因为它与ISO-8859-1匹配,但一旦我拥有unicode专有字符,它就会中断,并获得转义\u序列。例如,u'€95.00'将显示为'\u20ac95.00'。我很确定有人在写原始python unicode。无论如何,谢谢您的帮助。字节字符串中没有
\u
转义。您的意思是说您有
'\\u20ac95.00'
?但是你有
'\xa1'
(即文字字节161,而不是
'\\xa1'
)作为字符U+0000到U+00FF?