示例代码段:
import os
s = "hello 你好,很高兴遇到你"
s = s.decode("utf-8")  # 将内容解码为 utf-8
print(s)
os.system("pause")  # 暂停脚本执行,等待用户输入

运行该段代码会报错:
AttributeError:  'str' object has no attribute 'decode'

出现这个问题可能是两个原因造成的:
1、Python2和Python3在字符串编码上的区别。
2、Python 3.4: str : AttributeError: ‘str’ object has no attribute 'decode
原因一的解决方法:
print (‘张俊’.encode(‘utf-8’). decode(‘utf-8’) ) #必须将字节字符串解码后才能打印出来
参考链接:https://www.cnblogs.com/geekard/archive/2012/10/04/python-string-endec.html
原因二的解决方法:各种编码方式尝试解决:utf-8,gbk,ISO-8859-1,gb2312
原因一才是主要原因,主要解决方法。

修改示例代码:
import os
s = "hello 你好,很高兴遇到你"
s = s.encode("utf-8").decode("utf-8")  # 将内容解码为 utf-8
print(s)
os.system("pause")  # 暂停脚本执行,等待用户输入

此时执行可以正常输出 s  的值

AttributeError: ‘str’ object has no attribute ‘decode’
一般是因为str的类型本身不是bytes,所以不能解码

两个概念
普通str:可理解的语义
字节流str(bytes)(0101010101,可视化显示)

两个语法
Encode: 把普通字符串 转为 机器可识别的bytes
Decode: 把bytes转为字符串

两个差异
Python3的str 默认不是bytes,所以不能decode,只能先encode转为bytes,再decode
python2的str 默认是bytes,所以能decode

一个结论
所以str.decode 本质是bytes类型的str的decode
python3经常出现 AttributeError: ‘str’ object has no attribute ‘decode’

非要这样玩,只能先encode转为bytes,再decode
强制转换忽略错误:
bytes.decode(‘’utf-8‘’, ‘’ignore‘’)

记忆小技巧
编码就是encode,把你认识的转为,机器人认识的
解码decode,就是吧一堆机器认识的,解释为人能读懂的
————————————————
版权声明:本文为CSDN博主「柠 檬没我萌」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_43192819/article/details/108981008

 

参考:https://www.cnblogs.com/qianzf/p/13468261.html

python3下列代码会报上边的错

print("Response:", resp.text.decode('unicode_escape'))
解决办法:
print("Response:", resp.text.encode('utf-8').decode('unicode_escape'))
中间加上.encode('utf-8')即可。

问题原因:
python3里面,字符串要先encode手动指定其为某一编码的字节码之后,才能decode解码。

 

django-2.2.1 框架使用了decode,有时会报这个错误,使用添加 encode() 的方式修改django的代码:
sed -i "s/query.decode/query.encode\('utf\-8'\).decode/g" /usr/local/lib/python3.6/site-packages/django/db/backends/mysql/operations.py

posted on 2021-08-26 18:55  51core  阅读(3181)  评论(0)    收藏  举报