Python二进制字符串表示

时间:2017-11-19 14:10:31

标签: python string encoding

任何人都可以帮我解决以下问题:

我将str1本地定义为str1 = 'CV\xca\x86\x11\x85\x01\xc8',str2从另一层代码接收:

print str2 gives 'CV\xca\x86\x11\x85\x01\xc8' 所以它们看起来完全相同:

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'}

如何修改str2以获取与str1相同的十六进制或int值?

1 个答案:

答案 0 :(得分:1)

你有一个字符串,包含文字反斜杠,'x'字符和十六进制数字:

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

字符串的表示形式将反斜杠加倍,因此您可以重现该值。另一个字符串的表示没有这样的加倍,因为\xhh序列各自形成一个字符:

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

比较各个角色:

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

您可以使用string_escape编解码器解码转义序列:

>>> 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'