使用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函数的源码,可以看到有如下注释:

Python十六进制转码问题-LMLPHP

decode函数的第二个参数默认是strict,我们只要把它改成ignore就可以了

ignore:忽视无法解码的字符

replace:替换无法解码的字符

s = a.decode('utf-8', 'ignore')

或者

s = a.decode("string_escape")

完美解决问题

05-11 17:29