Python2与Python3直接字节转换

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代码,它工作得非常好:

# 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”-no
len(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'>