Python 3.x 打印的python变量不等于变量值

Python 3.x 打印的python变量不等于变量值,python-3.x,pdb,Python 3.x,Pdb,我有一个python脚本,它使用子流程调用php函数。php脚本的输出被捕获为变量以供进一步使用。当分析存储的变量时,我发现如果我打印变量,它的值与变量本身不同,我不明白为什么。我正准备尴尬,所以请开导我 是的,这个虚构的例子中的密码是“password” 在pdb中,这里是输出 password (Pdb) decrypted_password '\x00p\x00a\x00s\x00s\x00w\x00o\x00r\x00d' (Pdb) print(decrypted_password)

我有一个python脚本,它使用子流程调用php函数。php脚本的输出被捕获为变量以供进一步使用。当分析存储的变量时,我发现如果我打印变量,它的值与变量本身不同,我不明白为什么。我正准备尴尬,所以请开导我

是的,这个虚构的例子中的密码是“password”

在pdb中,这里是输出

password
(Pdb) decrypted_password
'\x00p\x00a\x00s\x00s\x00w\x00o\x00r\x00d'
(Pdb) print(decrypted_password)
password
(Pdb) locals()
{'cmd': '/usr/bin/php -f /opt/hello_world.php f2e57ba074b3c3d8d4d010bcff13083dc5928107f8cfbfaa4a52fff0155eebe5 JqiRnKJBaSwEOCI', 'decrypted_password': '\x00p\x00a\x00s\x00s\x00w\x00o\x00r\x00d'}

subprocess.get_output()
返回一个字节字符串,但Python将其识别为字符串。因此,您需要首先
.encode()
那个,然后
解码()
它:

>>> '\x00p\x00a\x00s\x00s\x00w\x00o\x00r\x00d'.encode().decode('utf_16_be')
'password'
它是用UTF-16 BE编码的,UTF-16 BE为每个字符提供两个字节,因此零为
\x00


您可以调整区域设置或以其他方式操作编码以正确识别字符串。

子流程。get\u output()
返回字节字符串,但Python将其识别为字符串。因此,您需要首先
.encode()
那个,然后
解码()
它:

>>> '\x00p\x00a\x00s\x00s\x00w\x00o\x00r\x00d'.encode().decode('utf_16_be')
'password'
它是用UTF-16 BE编码的,UTF-16 BE为每个字符提供两个字节,因此零为
\x00


您可以调整区域设置或以其他方式操作编码以正确识别字符串。

您是一位绅士和学者。非常感谢。你有没有链接可以进一步阅读?我觉得我需要进一步回顾这一点,因为我显然对这一主题缺乏理解。再次感谢@PhillipStack字符编码/解码您可以查看Python unicode文档:对于其他修复,这取决于您的操作系统等。非常感谢,我将进行回顾。感谢你的时间。你是一位绅士和学者。非常感谢。你有没有链接可以进一步阅读?我觉得我需要进一步回顾这一点,因为我显然对这一主题缺乏理解。再次感谢@PhillipStack字符编码/解码您可以查看Python unicode文档:对于其他修复,这取决于您的操作系统等。非常感谢,我将进行回顾。谢谢你的时间。