Направих скрипт за декодиране на файл, направен преди няколко години, и се сблъсках с проблем, докато правя втория си тест за декодиране.
Моят код:
#!/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 е добър кандидат за това.