如何在Python3中去除字符串前面的b前缀?
解决Python输出bytes类型带b前缀问题
你看到的字符串前的b前缀,说明对应内容是Python 3的bytes字节类型,不是普通字符串类型。你之前的操作没有生效是因为逻辑方向错误:encode()方法是将字符串转为字节类型,反而会增加b前缀;直接对bytes对象套str()强制转换,只会把b和外层引号一并转为字符串内容,无法去除前缀。
正确的处理方式是对所有bytes类型的元素调用decode()方法,转为普通字符串即可。你可以在循环内新增一行批量处理元组内的所有元素,修改后的代码如下:
path = "/etc/MultiQuickButton/quickbutton_" + x[1] + ".xml" menu = xml.dom.minidom.parse(path) self.XML_db = QuickButtonXML(menu) for e in self.XML_db.getMenu(): print("**** a ****",a) # 新增下行:批量将元组内bytes类型转为普通字符串 e = tuple(item.decode('utf-8') if isinstance(item, bytes) else item for item in e) if e[1] == "1": list.append(QuickButtonListEntry('green',(_(str(e[0])),e[0], '1'))) else: list.append(QuickButtonListEntry('red',(_(str(e[0])),e[0], '')))
如果你的XML文件使用的是非UTF-8编码,把decode参数里的utf-8替换为对应编码即可(比如gbk、latin-1)。如果存在少量无法解码的异常字符,可以添加errors='ignore'参数忽略错误,写法为item.decode('utf-8', errors='ignore')。
内容的提问来源于stack exchange,提问作者Fair Bird
相关产品推荐
相关产品推荐

