自定义解码脚本:扫描字符串文本时遇到文件结束符

0 投票
1 回答
868 浏览
提问于 2025-04-18 14:24

我写了一个脚本来解码几年前做的一个文件,但在进行第二次解码测试时遇到了问题。

我的代码:

#!/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编码就是一个不错的选择。

撰写回答