Python 3.6解析XML后,如何判断字节字符串是否以¬结尾?
解决Python解析XML后字节串判断特殊字符结尾的问题
嗨,我来帮你搞定这个问题!你遇到的情况其实是字节与字符串类型不匹配,加上特殊字符在字节字面量里的限制导致的,咱们一步步来解决:
先纠正一个小误区:ElementTree已经帮你解码了
当你解析UTF-8编码的XML时,text.text本身就已经是字符串类型了,你完全不需要手动调用encode('utf-8')转成字节串!直接用原字符串判断是最直观的:
# 最简单的正确写法 text_str = text.text if text_str.endswith('¬'): print("文本以¬结尾")
如果已经拿到了字节串,两种解决方式
要是因为某些场景你必须处理字节串,那也有两种靠谱的方法:
方法1:把字节串解码回UTF-8字符串
既然原本的文本是UTF-8编码,把字节串解码成字符串后,就能正常用字符做判断了:
# 解码字节串为字符串 text_str = text_string.decode('utf-8') if text_str.endswith('¬'): print("文本以¬结尾")
方法2:用特殊字符对应的UTF-8字节值判断
¬的UTF-8编码对应的字节是\xac,你可以用十六进制转义的字节字面量b'\xac'来判断,这样就不会触发语法错误了:
# 直接用字节值判断 if text_string.endswith(b'\xac'): print("字节串以¬对应的UTF-8字节结尾")
为什么之前的写法会报错?
- 第一个
TypeError:字节串的endswith方法只能接受字节或字节元组,不能传字符串,所以endswith('¬')类型不匹配,自然报错。 - 第二个
SyntaxError:Python的字节字面量b''里只能包含ASCII字符,¬不属于ASCII范围,所以直接写b'¬'会被判定为非法语法,必须用十六进制转义的方式表示非ASCII字节。
内容的提问来源于stack exchange,提问作者Mat
相关产品推荐
相关产品推荐

