自定义解码脚本:扫描字符串文本时遇到文件结束符
我写了一个脚本来解码几年前做的一个文件,但在进行第二次解码测试时遇到了问题。
我的代码:
#!/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()
当我运行这段代码时,出现了以下错误:
语法错误:在扫描字符串时遇到行尾
语法错误:在扫描字符串时遇到行尾
按任意键继续 . . .
顺便说一下,我使用的是Panda3D中自带的Python版本。
1 个回答
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编码就是一个不错的选择。