如何在Python 3中将unicode代码字符串转换为纯文本?

时间:2018-03-21 05:53:43

标签: python unicode

对于Stack和Google中的类似问题,有很多答案,但所有这些似乎都无关紧要。我担心问题存在于问题中,但仍然需要解决方案。

代码:

print(type(comment))
print(comment)

结果:

<class 'str'>
\u041d\u0435 \u0443\u043a\u0430\u0437\u0430\u043d\u043e

如何将其转换为纯文本?

UPD。

print(comment[0])

返回

\

2 个答案:

答案 0 :(得分:1)

一个答案中有两个答案:

如果你真的想快速解析它,你可以这样做:

import ast
s = ast.literal_eval('"' + comment.replace('"', '\\"') + '"')

s将包含您想要的内容 - 它将处理字符串,就像您在代码中以这种方式编写它一样。

(这比实际的eval更安全,因为它不允许评论执行任何功能 - 但你仍然可以通过在评论中加入\"来打破它

要正确处理它,你必须编写一个合适的词法分析器/解析器来逐字符地分析它。

但实际上,如果你最终得到那个字符串,之前的某些地方就出现了问题。你最终得到了一个带有转义unicode而不是实际内容的字符串。如果它来自您应用程序的某个地方,最好的方法是追溯到它的起源位置,并确保您不会在这种情况下最终处于这种状态。

答案 1 :(得分:0)

如果您在Python 3中使用str开始,则需要编码为字节,然后使用unicode-escape编解码器进行解码,以将这些文字转义码转换为Unicode:

comment = r'\u041d\u0435 \u0443\u043a\u0430\u0437\u0430\u043d\u043e'
print(type(comment))
print(comment)
print(comment.encode('ascii').decode('unicode-escape'))

输出:

<class 'str'>
\u041d\u0435 \u0443\u043a\u0430\u0437\u0430\u043d\u043e
Не указано