我制作了一个脚本来解码几年前制作的文件,我在进行第二次解码测试时遇到了问题。
我的代码:
#!/usr/bin/python
# -*- coding: utf-8 -*-
from decoder.encodings import *
#Toontown Online Encoded Script Decoder
"""
##########################################
# Decoder was built to decompile #
# Team Pawz Multihack v2.0 #
##########################################
"""
input = "Text can be located here: http://pastebin.com/rdeAhyar ";
def decode():
print input.decode('latin_1')
decode()
当我执行代码时,我得到了
SyntaxError:扫描字符串文字时的EOL
SyntaxError:扫描字符串文字时的EOL
按任意键继续。 。
如果这有助于我使用Panda3D中分发的Python版本。
答案 0 :(得分:1)
问题是只需粘贴二进制数据就可以在源代码中嵌入。该错误出现在Windows上,因为Windows将字节值26(十六进制1A)视为文本文件的末尾,并在此字节值之前停止读取文本文件。 Linux不受此影响,这就是我无法重现问题的原因。
观察Windows下“完整”read()
返回的文件大小和字节数的差异:
>>> os.path.getsize('test.py')
49297L
>>> len(open('test.py', 'r').read()) # text mode
1100
>>> len(open('test.py', 'rb').read()) # binary mode
49297
解决方案不是将二进制数据嵌入源代码中,而是从额外的文件中加载它。确保以二进制模式而不是文本模式打开它。
或者您必须对二进制数据进行编码,使其不再包含“异国情调”字节值。 Base64编码是一个很好的选择。