是否有 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
输出:
ф а й л е
我已经成功反编译了 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
输出:
ф а й л е