【发布时间】:2021-08-13 17:27:21
【问题描述】:
我从图书馆回来,似乎是一个不正确的 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 字符串中获取原始数据并将其视为常规字符串?
【问题讨论】: