这个问题源于调试代码中遇到的一个情况,首先观察下面的代码:
str_bytes = b'\x61\x62\x63'
string = str(str_bytes, encoding="utf-8")
print(string)
print(string == "abc")
# 输出
abc
True
上面代码输出没有任何问题。但是当str_bytes是从某一个字节流中读取的值,那么可能会有下面这种情况:
str_bytes = b'\x61\x62\x63\x00\x00\x00\x00\x00'
string = str(str_bytes, encoding="utf-8")
print(string)
print(string == "abc")
print("abc" in string)
#输出:
abc
False
True
str_bytes是从一个字节流中读出来的,8个字节表示一个字符串值,这时候使用==进行字符串判断就会出错。修改后的代码如下,使用strip将\x00去除即可。
str_bytes = b'\x61\x62\x63\x00\x00\x00\x00\x00'
string = str(str_bytes, encoding="utf-8")
string = string.strip("\x00") # 增加这一行
print(string)
print(string == "abc")
# 输出
abc
True