Python十六进制转码问题

使用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")

 

 

完美解决问题

 

posted @ 2018-06-07 09:50  傲娇的草履虫  阅读(1291)  评论(0编辑  收藏  举报