1.总结
开门见山:使用str.strip(’\x00’)方法,形如:
'MV-CE013-50GM\x00\x00'.strip('\x00')
2.背景
在使用PySide2写界面的时候,之前一直OK的tableWidget.item控件,今天不好用了,报了如下错误:
即嵌入的空字符的错误。
打印传值的device_type如下:
print("#device_type=%s#"%device_type)
print("#device_type.strip()=%s#"%device_type.strip())
print(type(device_type))
运行结果:
#device_type=MV-CE013-50GM #
#device_type.strip()=MV-CE013-50GM #
<class 'str'>
我们都知道使用str字符串有strip()方法可以去掉左右的空格。but not work now!
由于device_type这个数据来源camera_info字典:
device_type = camera_info['device type name']
print("camera_info=",camera_info)
运行结果:
camera_info= {'device type name': 'MV-CE013-50GM\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'}
原来我们要去除的是"\x00"字符。
3.代码
字符串中去除首尾的"\x00"字符,代码如下:
__author__="jn10010537"
camera_info= {'device type name': 'MV-CE013-50GM\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'}
print("1-camera_info=",camera_info)
print("2-#%s#"%camera_info['device type name'])
print("3-#%s#"%camera_info['device type name'].strip(" "))
#解决办法:
print("4-#%s#"%camera_info['device type name'].strip(b'\x00'.decode()))
print("5-#%s#"%camera_info['device type name'].strip('\x00'))
运行结果:
4.扩展
4.1 C语言的字符与字符串
与Python不同,C语言有基本类型字符char,而没有字符串类型。
C语言中’a’和”a”的区别:C的字符串中以字符’\0’(’\x00’) 作为结束标志,’\0’是一个ASCII码为0的字符,它不会引起任何控制动作,也不是一个可显示的字符。
字符串’a’实际包含2个字符:’a’和’\0’(’\x00’)
4.2 Python的’\x00’与空串”的区别
Python不支持单字符类型,单字符也在Python也是作为一个字符串使用。python字符串其实是一个固定长度的字符数组,所以不用结束标志了。修改字符串其实是另外生成一个新的。
参考:
https://blog.csdn.net/u012206617/article/details/100977067