/ / Сценарий за декодиране по избор: EOL при сканиране на литерала на низове - python, decoder, panda3d

Персонализиран декодиран скрипт: EOL при сканиране на низ literal - python, декодер, panda3d

Направих скрипт за декодиране на файл, направен преди няколко години, и се сблъсках с проблем, докато правя втория си тест за декодиране.

Моят код:

#!/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 при сканиране на литерала на низ

Натиснете произволен клавиш, за да продължите. , ,

Ако това ви помага да използвам версията на Python, разпространявана в Panda3D.

Отговори:

1 за отговор № 1

Проблемът е вграждането на двоични данни в източникакод, като просто го поставите. Грешката се появява в Windows, защото Windows вижда стойността на байта от 26 (hex 1A) като край на текстовите файлове и спира да чете текстови файлове точно пред тази стойност на байта. Linux не е засегнат от това, поради което не успях да възпроизведа проблема.

Наблюдавайте разликата в размера на файла и количеството байтове „пълно“ read() се връща под Windows:

>>> 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 е добър кандидат за това.