python 2.7';你期望什么?

python 2.7';你期望什么?,python,python-2.7,unicode,Python,Python 2.7,Unicode,好的。所以我有一个图书馆,它给了我这样的价值: >>> x 'ADC (10^-6 mm\xb2/s):Sep 05 2017 11-58-19 CDT' >>> type(x) str >>> print(x) ADC (10^-6 mm?/s):Sep 05 2017 11-58-19 CDT 它不是ascii,也不是UTF-8: >>> x.decode('utf-8') UnicodeDecodeError: 'u

好的。所以我有一个图书馆,它给了我这样的价值:

>>> x
'ADC (10^-6 mm\xb2/s):Sep 05 2017 11-58-19 CDT'
>>> type(x)
str
>>> print(x)
ADC (10^-6 mm?/s):Sep 05 2017 11-58-19 CDT
它不是ascii,也不是UTF-8:

>>> x.decode('utf-8')
UnicodeDecodeError: 'utf8' codec can't decode byte 0xb2 in position 13: invalid start byte
我不能只是转换它:

>>> y = unicode(x)
UnicodeDecodeError: 'ascii' codec can't decode byte 0xb2 in position 13: ordinal not in range(128)
但我可以通过直接复制和粘贴做到这一点:

>>> y = u'ADC (10^-6 mm\xb2/s):Sep 05 2017 11-58-19 CDT'
>>> type(y)
unicode
>>> y.encode('utf-8')
'ADC (10^-6 mm\xc2\xb2/s):Sep 05 2017 11-58-19 CDT'
>>> print(y)
ADC (10^-6 mm²/s):Sep 05 2017 11-58-19 CDT
我想将
x
转换为类型
unicode
。由于某些原因,将该值指定为文字会起作用。有没有办法使用相同的文字赋值规则来解码我的
x


对不起。我知道我这里缺少了一些超基本的东西。

看起来库给了你拉丁-1编码的字符串(或者可能是代码页1252)。这很烦人,不是吗。。。你必须猜出正确的编码是什么!(这是Python3的激励因素之一。)


请注意,在拉丁语-1中,
'\xb2'
在解码时变为
u'\xb2'
。这适用于所有拉丁-1字符,因为Unicode的底部256个代码点与拉丁-1相同。

x.decode('latin1')
。(见)。谢谢!出于某种原因,我认为拉丁语-1和ascii是相同的编码。再仔细想想:为什么
x=u'\xb2'
可以工作?sys.getdefaultencoding()是ascii,sys.stdin.encoding是utf-8。里面没有拉丁字母1或8859,那它为什么要尝试这种编码呢?@Nate:编码在这里并不重要
u'\xb2'
是一个Unicode字符串,它没有编码(技术上是这样,但编码是
Unicode
类实现中隐藏的技术细节)。它与
u'\u00b2'
unichr(0xb2)
相同,或者您希望指定“包含字符u+00B2的Unicode字符串”。或者我应该说的是,它在源代码中显示为ASCII,因此源代码的编码无关紧要。aaaaahhhhh这很有意义。如果我想要一个unicode字符,\u00b2应该是需要编码的字节值。谢谢
y = x.decode('latin-1')