Python2与Python3直接字节转换
我有Python 2代码,它工作得非常好:Python2与Python3直接字节转换,python,string,python-3.x,byte,Python,String,Python 3.x,Byte,我有Python 2代码,它工作得非常好: # python 2 key = 'L\x1e@\xael\xc0\xa9\xa3\x8d\x9e5\xac\x00\xe5\x98h' # type(key) => <type 'str'> 我需要将其转换为字符串“按其外观”,而不替换任何字符 我试着通过ascii来实现: key_chuncks = [chr(s) for s in key] # ['L', '\x1e', '@', '®', 'l', 'À', '©', '£
# python 2
key = 'L\x1e@\xael\xc0\xa9\xa3\x8d\x9e5\xac\x00\xe5\x98h'
# type(key) => <type 'str'>
我需要将其转换为字符串“按其外观”,而不替换任何字符
我试着通过ascii来实现:
key_chuncks = [chr(s) for s in key]
# ['L', '\x1e', '@', '®', 'l', 'À', '©', '£', '\x8d', '\x9e', '5', '¬', '\x00', 'å', '\x98', 'h']
如您所见,chr(s)
将一些字节序列解释为字符,我不需要这种行为。
有没有一种方法可以将我的字节转换成字符串“按它看起来的样子”?没有任何字符解释(解码)
我所需要的就是在Python3中将key\u转换为key\u
key_before = b'L\x1e@\xael\xc0\xa9\xa3\x8d\x9e5\xac\x00\xe5\x98h'
key_after = 'L\x1e@\xael\xc0\xa9\xa3\x8d\x9e5\xac\x00\xe5\x98h'
# type(key_after) => <type 'str'>
key_before=b'L\x1e@\xael\xc0\xa9\xa3\x8d\x9e5\xac\x00\xe5\x98h'
后键='L\x1e@\xael\xc0\xa9\xa3\x8d\x9e5\xac\x00\xe5\x98h'
#类型(后面的键)=>
不要混淆多个字符的repr()
输出。你所说的“看起来”是什么意思?这是repr()
输出,它产生调试输出,一个字符串文字符号,用于安全地复制到Python解释器以重新创建变量。@martijn pieters我同意,这个值只是解释器的repr()
视图。最初,我的键
只是一些随机的32字节,而不是符号。您可以解码为拉丁语-1(它将字节一对一映射到Unicode点)。但是repr()
输出将不会使用\x
转义;您必须对该输出使用ascii()
函数。MD5哈希和base64编码都需要字节作为输入。@yanik:“它们的键是32字节的实数,但由解释器这样表示,所以看起来像16”-nolen(key)==16
字节。不要混淆len(键)
和len(repr(键))
<代码>键
是一个字节序列。它的大小是16
,而不管它的repr()
。不管它看起来如何——有16个字节,不多也不少。
key_before = b'L\x1e@\xael\xc0\xa9\xa3\x8d\x9e5\xac\x00\xe5\x98h'
key_after = 'L\x1e@\xael\xc0\xa9\xa3\x8d\x9e5\xac\x00\xe5\x98h'
# type(key_after) => <type 'str'>