当前位置:   article > 正文

python中base64 decode_python2解码base64中文乱码怎么解决?

b64decode 乱码

Python 3之前,str对象只是一个简单的字符序列。base64解码后,得到的是一个字节序列:

>>> base64.b64decode('5Yac5aSr5a6J5YWo56S+5Yy6')

'\xe5\x86\x9c\xe5\xa4\xab\xe5\xae\x89\xe5\x85\xa8\xe7\xa4\xbe\xe5\x8c\xba'

这个字节序列到底是什么,取决于你的应用上下文。它可能是一个 ASCII 文本,可能是一个 UTF-8 文本,也可能是一个 GBK 文本。

如果你的终端环境或者网页环境,跟这个字节序列的编码方式一致,便可正常显示。例如,我的终端环境是 UTF-8,因此可以正常显示你解码后的字符串:

>>> print(base64.b64decode('5Yac5aSr5a6J5YWo56S+5Yy6'))

农夫安全社区

看截图,你用的应该是Windows的终端环境,编码应该是 GBK,所以你需要手工进行编码转换,从 UTF-8 换成 GBK :

>>> print(base64.b64decode('5Yac5aSr5a6J5YWo56S+5Yy6').decode('utf8').encode('gbk'))

那么,Python 3为啥不会乱码咧?——它想解决各种奇形怪状的乱码问题。Python中的str对象,不是简单的字节序列,它保存统一的Unicode码位,与编码方式无关。当你输出str对象时,Python根据终端环境编码,悄悄帮你转化成对应编码的字节序列。这样一来,终端乱码问题就得到根治。

关于文本编码相关的原理和最佳实践,可以参考我先前写的一篇文章:一文说清文本编码那些事 。如果有什么地方没有讲明白,请提出来,我再进一步完善。

洞悉文本编码本质,也就不畏惧任何乱码问题了。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/AllinToyou/article/detail/177186
推荐阅读
相关标签
  

闽ICP备14008679号