首页 > 解决方案 > 是否有 Python 函数可以将 unicode 文字转换为可读形式?

问题描述

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

例如

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

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

标签: python-2.7unicodeliterals

解决方案


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

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

在 Python 3 中:

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

蟒蛇 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

输出:

ф а й л е

推荐阅读