2014-01-06 3 views
0

많은 내용 (심볼 heavy <>?!""''=:;)을 포함하는 파일이 있는데, 나는 부분 압축을하고, 파일을 읽고, 바이트 스트림으로 변환 한 다음 압축합니다. 저는 압축이 희미 해지기를 기대합니다 : \x1f\x8b\x08\x00\x00\x92\x04 등등.GZIP (bytestream) 압축의 신비한 바이트 Python3

그러나 더 많은 것 같이 나온다 : \x1f\x8b\x08\x00\x00\xa60v?\x04{?X\x0eDa 등등. 분명히 00에서 ff 범위의 16 진수 값을 가져야합니까?

Python3 코드의 주된 조각 : 내가 찾을 수

with open('somefile', 'r') as f: 
    for lines in f.readlines(): 
    messages = (str(lines)).encode('ascii') #Or 'UTF-8' both produce funny results 
    compMessages = gzip.compress(messages) #Default level of 6 is fine here 
    return compMessages 

유일한 재미/관련 정보를 len(str(lines))len(lines.encode('ascii'))

아이디어에 다른 값을하시기 바랍니다 때문이다?

+0

어? 너는 무엇을 기대하고 있니? 압축 된 스트림은 가능한 모든 바이트 값을 사용해야하므로 "신비한"바이트가 무엇을 의미하는지 알지 못합니다. –

+0

나는 '순수한 헥스'를 기대하고있다. 그것은 \ x00과 \ xff 사이의 값을 말합니다. '\ xfaXg}와 같은 값이 아닙니다. – BrownE

답변

1

출력물에 대해 "신비한"것은 없습니다. 너는 그것을 정확하게 읽지 못하고있다. 이 :

\x1f\x8b\x08\x00\x00\xa60v?\x04{?X\x0eDa 

이 같은

\x1f\x8b\x08\x00\x00\xa6\x30\x76\x3f\x04\x7b\x3f\x58\x0e\x44\x61 

로 그냥 그 ASCII 인쇄 할 수없는 문자 ( 0x200x7E 사이의 16 진수 값을 가진 사람) 같은 0, v, ?, {, Da\x 이스케이프 코드가 아닌 ascii 값으로 표시됩니다. 이를 확인하려면

다음을 준수하십시오

>>> [ord(i) for i in '\x1f\x8b\x08\x00\x00\xa60v?\x04{?X\x0eDa'] 
[31, 139, 8, 0, 0, 166, 48, 118, 63, 4, 123, 63, 88, 14, 68, 97] 

의 모든 수치

0255 사이.