是否有 Python 函数将 unicode 文字转换为可读形式?

Is there a Python function to convert unicode literals into a readable form?

我已经成功反编译了 python 2.7 扩展名为 .pyc 的文件。问题是原始脚本包含俄语注释块,反编译后,它们被转换为原始 unicode 文字,

例如

msg = u '\ u0444 \ u0430 \ u0439 \ u043b \ u0435'

而且我发现很难将它们转换成可读的形式。我想 python 中有一个函数接受 unicode 文字作为参数并在输出中给出一个可读的字符串,但我的搜索是徒劳的。

您的数据中 \u 之间真的有空格吗?这将导致解析问题,因此您需要先删除它们。您不能使用 replace(" ",""),因为如果字符串不在 u.

之前,则字符串已经被格式化为 \

获得正确的字符串后,您可以 (1) 使用 python 3 或 (2) 将 unicode 支持导入 2.7 或 (3) 在 2.7 中使用 u"" 字符串...

在Python 3:

mytext='\u0444 \u0430 \u0439 \u043b \u0435'
print(mytext)

Python 2.7:

from __future__ import unicode_literals
mytext='\u0444 \u0430 \u0439 \u043b \u0435'
print mytext

Python 2.7 w/o 导入:

mytext=u'\u0444 \u0430 \u0439 \u043b \u0435'
# note the `u` before the string. 
# In your example, you'd remove all those extra spaces
print mytext

输出:

ф а й л е

更新:如果您的输出与上面所写的完全一致,那么您可以先修改字符串以去除多余的空格,然后对其求值以生成正确的格式。 (感谢@lenz 对 literal_eval 的评论。)

import ast
original = "msg = u '\ u0444 \ u0430 \ u0439 \ u043b \ u0435'"
despaced = original.replace("u '","u'").replace("\ ","\")
# chop off original assignment with split() and assign to new variable
cleaned  = ast.literal_eval(despaced.split("=")[1].strip())
print cleaned

输出:

ф а й л е