为什么在Python 2和3中,chr(0x24)+ chr(0x84)的结果不同

3

我正在使用Python解决来自exploit-exercises的Protostar挑战。但是,我对这个代码在Python 3中产生不同输出感到惊讶。

payload = chr(0x24) + chr(0x84)
print (payload)

在终端中:

$ python exploit-stack3.py | xxd
00000000: 2484 0a                                  $..
$ python3 exploit-stack3.py | xxd
00000000: 24c2 840a                                $...

请问有人能解释一下c2是从哪里来的吗?

1
第二个是UTF8。 - Sami Kuhmonen
1
Python 3зҡ„strзұ»еһӢеҜ№еә”дәҺPython 2зҡ„unicodeзұ»еһӢгҖӮPython 2зҡ„strзұ»еһӢеңЁPython 3дёӯжҳҜbytesзұ»еһӢгҖӮ - juanpa.arrivillaga
我猜这与utf-8有关。但更详细的信息会更好。我真的不明白哪个字符添加了c2。
chr(0xc284) '슄' chr(0x24) '$' chr(0x24c2) 'Ⓜ'
- Olivier Lasne
看看Ignacio的回答,chr(0x84).encode() == b'\xc2\x84' - juanpa.arrivillaga
2个回答

3

1
在ASCII编码中,可打印字符以0x7E(波浪号:~)结尾。Python 2使用ASCII编码,Python3使用Unicode。0x84超出了ASCII字符集的范围,这就是为什么输出结果会不同的原因。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接