【发布时间】:2016-06-25 16:21:09
【问题描述】:
我想通过使用 Unicode 转义序列来混淆 Python 脚本。
例如,
print("Hello World")
在 Unicode 转义序列中是:
\x70\x72\x69\x6e\x74\x28\x22\x48\x65\x6c\x6c\x6f\x20\x57\x6f\x72\x6c\x64\x22\x29
在我的命令行中,我可以通过以下方式实现:
$ python3 -c \x70\x72\x69\x6e\x74\x28\x22\x48\x65\x6c\x6c\x6f\x20\x57\x6f\x72\x6c\x64\x22\x29
Hello World
我创建了一个文件并将“Hello World”Unicode 转义序列作为源代码放入其中。
但是当我运行它时,我得到:
$ python3 sample.py
SyntaxError: unexpected character after line continuation character
如何在我的源代码中使用 Unicode 转义序列。
【问题讨论】:
-
问题是,python 将其读取为字符串,因此当您执行
exec(unicode)或os.system("python -c "+ unicode)时,我得到同样的错误,因为它是一个字符串,它会添加“”到unicode。 -
您的声明似乎是错误的:
$ python3 -c \x70\x72\x69\x6e\x74\x28\x22\x48\x65\x6c\x6c\x6f\x20\x57\x6f\x72\x6c\x64\x22\x29 Traceback (most recent call last): File "<string>", line 1, in <module> NameError: name 'x70x72x69x6ex74x28x22x48x65x6cx6cx6fx20x57x6fx72x6cx64x22x29' is not defined -
无论如何我不明白你的前提。
Hello World已经是 utf-8。 Utf-8 是 7 位 ASCII 的超集。 -
我刚试过
python3 -c \x70\x72\x69\x6e\x74\x28\x22\x48\x65\x6c\x6c\x6f\x20\x57\x6f\x72\x6c\x64\x22\x29,它可以工作。我的python版本是3.4.0。我想混淆代码 -
您在哪里运行该命令?我相信我们看到不同的结果仅仅是因为你的 shell 正在解释转义,因此 python 解释器实际看到的只是
-c print("Hello World"),而我的 shell 忽略了转义。要对此进行测试,请尝试运行命令import time;time.sleep(60)的“unicode 版本”,然后使用ps aux | grep python检查该命令使用了哪个命令行,您应该会看到它没有转义。
标签: python-3.x unicode character-encoding