包含字节的字符串的解决办法

通过微信支付接口下单后,下单如果成功的话不会出现中文,所以一切正常,但是失败就会返回中文提示,所以出现了一些乱码的情况,原因是使用错误的编码对返回信息进行了解码,然后显示给我的是一个包含字节的字符串,一开始没搞懂,总想直接去decode,但是由于是字符串,所以是不能直接解码的,然后我又先是encode再decode,这种方法也是行不通的,因为是相当于对于当前这个包含字节的字符串进行编码和解码,所以是无法获取原生信息的,然后的话在baidu到解决方法了,代码如下:

>>>str1 = '订å\x8d\x95å\x8f\x91ç\x94\x9fè¿\x87é\x80\x80款ï¼\x8cé\x80\x80款详æ\x83\x85请æ\x9f¥è¯¢é\x80\x80款å\x8d\x95'
>>>str1
'订å\x8d\x95å\x8f\x91ç\x94\x9fè¿\x87é\x80\x80款ï¼\x8cé\x80\x80款详æ\x83\x85请æ\x9f¥è¯¢é\x80\x80款å\x8d\x95'
>>>bytes(str1,'l1')
b'\xe8\xae\xa2\xe5\x8d\x95\xe5\x8f\x91\xe7\x94\x9f\xe8\xbf\x87\xe9\x80\x80\xe6\xac\xbe\xef\xbc\x8c\xe9\x80\x80\xe6\xac\xbe\xe8\xaf\xa6\xe6\x83\x85\xe8\xaf\xb7\xe6\x9f\xa5\xe8\xaf\xa2\xe9\x80\x80\xe6\xac\xbe\xe5\x8d\x95'
>>>bytes(str1,'l1').decode("utf-8")
'订单发生过退款,退款详情请查询退款单'
>>>unicode = _
>>>unicode
'订单发生过退款,退款详情请查询退款单'
>>>utf8 = unicode.encode('utf-8')
>>>utf8
b'\xe8\xae\xa2\xe5\x8d\x95\xe5\x8f\x91\xe7\x94\x9f\xe8\xbf\x87\xe9\x80\x80\xe6\xac\xbe\xef\xbc\x8c\xe9\x80\x80\xe6\xac\xbe\xe8\xaf\xa6\xe6\x83\x85\xe8\xaf\xb7\xe6\x9f\xa5\xe8\xaf\xa2\xe9\x80\x80\xe6\xac\xbe\xe5\x8d\x95'

关键在于bytes(str, 'l1)这个步骤,通过这个转换,可以获得原生的字节数据,只要这些字节的编码,就可以直接进行解码了,从而消除乱码的情况。

posted @ 2018-01-29 15:30  zzy0306  阅读(297)  评论(0编辑  收藏  举报