使用Python的decode函数转码十六进制的字符串时,会出现UnicodeDecodeError: 'utf8' codec can't decode byte 0xba in position 3: invalid start byte的错误!
例如我需要转码十六进制字符串 '\xe8\xa7\xa3\xe7\xba\xa6\xe6\x88\x90\xe5\x8a\x9f' ,使用过以下几种方法,不是出错就是乱码
a = '\xe8\xa7\xa3\xe7\xba\xa6\xe6\x88\x90\xe5\x8a\x9f'
1. s1 = a.decode('utf-8') 2. s2 = a.decode('unicode_escape') 3. c = a.encode('raw_unicode_escape')
b = repr(c)
s3 = unicode(eval(b), "gbk").encode('utf8')
我们看看decode函数的源码,可以看到有如下注释:
decode函数的第二个参数默认是strict,我们只要把它改成ignore就可以了
ignore:忽视无法解码的字符
replace:替换无法解码的字符
s = a.decode('utf-8', 'ignore')
或者
s = a.decode("string_escape")
完美解决问题