2017-11-19 9 views
0

사람은 다음 문제 좀 도와주십시오 수 있습니다 :파이썬 바이너리 문자열 표현은

print binascii.hexlify(str1) gives 4356ca86118501c8 or INT: 4852288325706645960

하지만 STR2에 대한

print binascii.hexlify(str2) gives 43565c7863615c7838365c7831315c7838355c7830315c786338 or int 108206947078930905153039906183652663420044626270557263434900280

문제는

print chardet.detect(str1) gives me my local encoding: {'confidence': 0.73, 'language': '', 'encoding': 'Windows-1252'}

print chardet.detect(str2) gives {'confidence': 1, 'language': '', 'encoding': 'ascii'}

가 어떻게 STR1에 대한처럼에서 같은 진수 또는 INT 값을 얻을 수있는 STR2을 수정할 수 있습니다 아마도 다른 인코딩 것 같다?

답변

1

는 리터럴 백 슬래시, 'x' 문자와 16 진수의 문자열이 있습니다

>>> from binascii import unhexlify 
>>> unhexlify('43565c7863615c7838365c7831315c7838355c7830315c786338') 
'CV\\xca\\x86\\x11\\x85\\x01\\xc8' 

문자열의 표현은 백 슬래시 두 배를, 그래서 당신은 값을 재현 할 수 있습니다. 당신은 string_escape 코덱 이스케이프 시퀀스를 디코딩 할 수

>>> 'CV\xca\x86\x11\x85\x01\xc8'[2] 
'\xca' 
>>> 'CV\\xca\\x86\\x11\\x85\\x01\\xc8'[2] 
'\\' 

:

>>> unhexlify('4356ca86118501c8') 
'CV\xca\x86\x11\x85\x01\xc8' 

는 개별 문자 비교 : 다른 문자열의 표현은 \xhh 시퀀스 각각 단일 문자를 형성하기 때문에, 그런 배로이 없습니다 :

>>> from binascii import hexlify 
>>> 'CV\\xca\\x86\\x11\\x85\\x01\\xc8'.decode('string_escape') 
'CV\xca\x86\x11\x85\x01\xc8' 
>>> hexlify('CV\\xca\\x86\\x11\\x85\\x01\\xc8'.decode('string_escape')) 
'4356ca86118501c8' 
+0

완벽한 도움을 주셔서 감사합니다. – Miso