作为对我的意思的简单演示,subprocess.communicate()
的{{1}}始终是stdout
字符串。
可是:
bytes
此外,如果我关注Convert bytes to a Python string,
>>> assert stdout == bytes('{}'.format(stdin), "utf-8"), \
"{} != {}".format(stdout, stdin)
AssertionError: b'\x00' != b'0'
它正在尝试转换和比较字节字符串,但我无法弄清楚如何
将它们转换为正确的字节
使字符串看起来相同
在这种情况下,我碰巧可以灵活地阅读单数字符的>>> assert \
stdout.decode("utf-8") == \
bytes('{}'.format(stdin), "utf-8").decode("utf-8"), \
"{} != {}".format(stdout, stdin)
AssertionError: b'\x00' != b'0'
并将ord
与int:0
进行比较。还有什么可以解决这个问题?
答案 0 :(得分:3)
您的第二个字节字符串b'0'
与b'\x00'
的字符串确实不同。前者是字符 0
,它是ASCII码点0x30。你会注意到:
>>> b'0' == b'\x30'
True
b'\x00'
代表NUL character。
请参阅Binary Sequence Types和String and Bytes literals规范,其中介绍了b''
语法:
字节文字中只允许使用ASCII字符(无论声明的源代码编码如何)。必须使用适当的转义序列将超过127的任何二进制值输入到字节文字中。