2014-07-23 7 views
0

몇 년 전 만들어진 파일을 디코딩하는 스크립트를 만들었고 두 번째 디코드 테스트를 수행하는 동안 문제가 발생했습니다.커스텀 디코드 스크립트 : EOL에서 문자열 리터럴을 검색하는 중

내 코드 :이 내가 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 while scanning string literal

SyntaxError: EOL while scanning string literal

Press any key to continue . . .

를 얻을.

+0

문제는 표시된 코드에 없습니다. 어쩌면 당신은'input' 값을 링크의 붙여 넣기로 대체 할 생각인가요? 방법? 그 텍스트에 문자열 리터럴을 끝내는 것이 아무것도 없습니까? 어떤 오류가 발생했는지 설명합니다. 또한 백 슬래시가 이스케이프 처리되는지 또는 _raw_ 문자열 리터럴을 사용하는지 확인해야합니다. – BlackJack

+0

"텍스트는 여기에 위치 할 수 있습니다."라는 코드 안의 pastebin 링크에 넣으므로 stackoverflow에 입력을 게시 할 수 없습니다. 코드화 된 코드의 오랜 부분을 시도했습니다. 지난 몇 개월 동안 해독 할 수 있습니다. – Crowded

+0

두 부분을 나누는 대신 전체 실행 가능한 예제를 붙여 넣기 저장소에 넣을 수 있습니다. 그러면 두 부분을 결합하는 방법이 궁금합니다. 여러 가지 방법으로 수행 할 수 있기 때문에 특정 문제를 재현하는 것이 어렵습니다. 어쨌든 왜 바이너리 데이터를 소스 코드에 붙여 넣으시겠습니까? 자체 파일에 넣고 바이너리 모드로 읽는 것이 더 쉽습니다. – BlackJack

답변

1

문제는 바이너리 데이터를 단순히 붙여 넣기 만하면 소스 코드에 삽입하는 것이 문제입니다. Windows에서 텍스트 파일의 끝으로 26 (16 진수 1A)의 바이트 값을보고이 바이트 값 바로 전에 텍스트 파일을 읽지 않기 때문에 Windows에이 오류가 나타납니다. 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 인코딩이 이에 대한 좋은 후보입니다.

+0

어떻게하면 파일을 내 입력으로 읽을 수 있습니까? URL을 읽는 방법 만 알고 있습니다. – Crowded

+0

Python 설명서의 자습서에는 파일에 대한 섹션이 있습니다. – BlackJack

+0

도움 주셔서 감사합니다. – Crowded