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

时间:2019-05-06 05:13:35

标签: python-2.7 unicode literals

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

例如

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

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

1 个答案:

答案 0 :(得分:0)

您的数据中\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:

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

输出:

ф а й л е