我已成功反编译扩展名为.pyc的python 2.7文件。问题在于原始脚本包含俄语注释框,经过反编译后,它们被转换为原始Unicode文字
例如
msg = u '\ u0444 \ u0430 \ u0439 \ u043b \ u0435'
,我发现很难将它们转换为可读的形式。我想python中有一个函数可以接受Unicode文字作为参数,并在输出中提供可读的字符串,但是我的搜索是徒劳的。
答案 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
输出:
ф а й л е