我从图书馆获得了一个看起来是不正确的Unicode字符串:
>>> title
u'Sopet\xc3\xb3n'
现在,这两个十六进制转义序列是U+00F3 LATIN SMALL LETTER O WITH ACUTE的UTF-8编码。就我所知,在Python中,Unicode字符串应该包含实际字符,而不是字符的UTF-8编码,所以我认为这是不正确的,可能是库中的错误或输入中的错误,对吗?
问题是,我怎么样才能(a)识别我的Unicode字符串中是否有UTF-8编码的文本,以及(b)将其转换为正确的Unicode字符串?
我卡在了(a)上,因为从编码上来说,原始字符串没有任何问题(即,它们都是有效的字符,u'\xc3\xb3' == ó,但它们不是应该出现的字符)。
看起来,我可以通过eval()那个repr()输出减去前面的"u"来获取一个str,然后使用UTF-8对该str进行解码来实现(b)。
>>> eval(repr(title)[1:]).decode("utf-8")
u'Sopet\xf3n'
>>> print eval(repr(title)[1:]).decode("utf-8")
Sopetón
但是这个方法看起来有些笨拙。是否有一种官方认可的方法可以从Unicode字符串中获取原始数据,并将其作为常规字符串处理?
u'\u03b5\u03bb\u03bb\u03b7\u03bd\u03b9\u03ba\u03ac'的意思是希腊语。
.encode('latin1') - tzot