这是我的代码:
import imaplib
from email.parser import HeaderParser
conn = imaplib.IMAP4_SSL('imap.gmail.com')
conn.login('example@gmail.com', 'password')
conn.select()
conn.search(None, 'ALL')
data = conn.fetch('1', '(BODY[HEADER])')
header_data = data[1][0][1].decode('utf-8')
此时我收到错误消息
AttributeError: 'str' object has no attribute 'decode'
Python 3不再有解码,我是对的吗?我怎样才能解决这个问题?
另外,在:
data = conn.fetch('1', '(BODY[HEADER])')
我只选择第一封电子邮件。如何选择全部?
答案 0 :(得分:121)
您正在尝试解码已解码的对象。您有str
,无需再从UTF-8解码。
只需删除.decode('utf-8')
部分:
header_data = data[1][0][1]
至于您的fetch()
电话,您明确要求的只是第一条消息。如果要检索更多消息,请使用范围。请参阅documentation:
以下命令的 message_set 选项是一个字符串,用于指定要执行的一条或多条消息。它可能是一个简单的消息号(
'1'
),一系列消息号('2:4'
),或一组用逗号分隔的非连续范围('1:3,6:9'
)。范围可以包含星号以指示无限上限('3:*'
)。
答案 1 :(得分:38)
如果您在 PyJWT v2.0.0 版本 (22/12/2020) 之后使用 jwt 身份验证登陆此处,您可能希望将您的 PyJWT 版本冻结到 func(int) main.A
文件中的先前版本。
var toastEl = toast();
document.body.appendChild(toastEl)
const myToast = new Toast(toastEl);
myToast.show();
答案 2 :(得分:26)
从Python 3开始,所有字符串都是unicode对象。
a = 'Happy New Year' # Python 3
b = unicode('Happy New Year') # Python 2
之前的代码是一样的。所以我认为你应该删除.decode('utf-8')
。因为你已经获得了unicode对象。
答案 3 :(得分:19)
通过此方法使用它:
str.encode().decode()
答案 4 :(得分:6)
我不熟悉这个库,但是如果你的问题是你不想要一个字节数组,一个简单的方法是直接在一个强制转换中指定一个编码类型:
>>> my_byte_str
b'Hello World'
>>> str(my_byte_str, 'utf-8')
'Hello World'
答案 5 :(得分:2)
它已经在Python3中解码了,直接尝试就可以了。
答案 6 :(得分:1)
使用编解码器模块的open()读取文件:
import codecs
with codecs.open(file_name, 'r', encoding='utf-8', errors='ignore') as fdata:
答案 7 :(得分:1)
这对我有用:
html.replace("\\/", "/").encode().decode('unicode_escape', 'surrogatepass')
这类似于json.loads(html)行为
答案 8 :(得分:1)
在使用 JWT access_token
包创建 Flask_JWT_extended
时,我得到 'str' 对象没有属性 'decode'。
为了解决这个问题,我将我的 Flask-JWT-Extended
软件包升级到了 Flask-JWT-Extended==4.1.0
供参考:
答案 9 :(得分:1)
在 Python 3 中,这种心理模型非常简单:
str
转换为 bytes
对象的过程bytes
对象转换为 str
┏━━━━━━━┓ ┏━━━━━━━┓
┃ ┃ -> encoding -> ┃ ┃
┃ str ┃ ┃ bytes ┃
┃ ┃ <- decoding <- ┃ ┃
┗━━━━━━━┛ ┗━━━━━━━┛
在您的情况下,您正在调用 data.decode("UTF-8")
,但该变量已经是一个 str
对象并且已经被解码。因此,如果您需要字符串,只需直接引用 data
。
答案 10 :(得分:0)
对于Python3
html =“”“ \ u003Cdiv id = \ u0022contenedor \ u0022 \ u003E \ u003Ch2 class = \ u0022text-left mb-2 \ u0022 \ u003EInformaci \ u00f3n del veh \ u00edculo de Patente AA345AA \ u003C \ / h2 \ u003E \ n \ n \ n \ n \ u003Cdiv class = \ u0022panel panel-default-disabled mb-2 \ u0022 \ u003E \ n \ u003Cdiv class = \ u0022panel-body \ u0022 \ u003E \ n \ u003Ch2 class = \ u0022table_title mb- 2 \ u0022 \ u003EInformaci \ u00f3n del Registro Automotor \ u003C \ / h2 \ u003E \ n \ u003Cdiv class = \ u0022col-md-6 \ u0022 \ u003E \ n \ u003Clabel class = \ u0022control-label \ u0022 \ u003ERegistro Seccional \ u003C \ / label \ u003E \ n \ u003Cp \ u003ESAN MIGUEL N \ u00b0 1 \ u003C \ / p \ u003E \ n \ u003Clabel class = \ u0022control-label \ u0022 \ u003EDirecci \ u00f3n \ u003C \ / label \ u003E \ n \ u003Cp \ u003EMAESTRO ANGEL D \ u0027ELIA 766 \ u003C \ / p \ u003E \ n \ u003Clabel class = \ u0022control-label \ u0022 \ u003EPiso \ u003C \ / label \ u003E \ n \ u003Cp \ u003EPB \ u003C \ / p \ u003E \ n \ u003Clabel class = \ u0022control-label \ u0022 \ u003EDpartamento \ u003C \ / label \ u003E \ n \ u003Cp \ u003E- \ u003C \ / p \ u003E \ n \ u003Clabel class = \ u0022control-la bel \ u0022 \ u003EC \ u00f3digo postal \ u003C \ / label \ u003E \ n \ u003Cp \ u003E1663 \ u003C \ / p \ u003E \ n \ u003C \ / div \ u003E \ n \ u003Cdiv class = \ u0022col-md-6 \ u0022 \ u003E \ n \ u003Clabel class = \ u0022control-label \ u0022 \ u003ELocalidad \ u003C \ / label \ u003E \ n \ u003Cp \ u003ESAN MIGUEL \ u003C \ / p \ u003E \ n \ u003Clabel class = \ u0022control-label \ u0022 \ u003EProvincia \ u003C \ / label \ u003E \ n \ u003Cp \ u003EBUENOS AIRES \ u003C \ / p \ u003E \ n \ u003Clabel class = \ u0022control-label \ u0022 \ u003ETel \ u00e9fono \ u003C \ / label \ u003E \ n \ u003Cp \ u003E(11)46646647 \ u003C \ / p \ u003E \ n \ u003Clabel class = \ u0022control-label \ u0022 \ u003EHorario \ u003C \ / label \ u003E \ n \ u003Cp \ u003E08:30 a 12:30 \ u003C \ / p \ u003E \ n \ u003C \ / div \ u003E \ n \ u003C \ / div \ u003E \ n \ u003C \ / div \ u003E \ n \ n \ u003Cp class = \ u0022文本中心mt-3 mb-1隐藏- print \ u0022 \ u003E \ n \ u003Ca href = \ u0022javascript:window.print(); \ u0022 class = \ u0022btn btn-default \ u0022 \ u003EImprim \ u00ed la consulta \ u003C \ / a \ u003E \ u0026nbsp; \ u0026nbsp; \ n \ u003Ca href = \ u0022 \ u0022 class = \ u0022btn use-ajax btn-primary \ u0022 \ u003EHacer otra consulta \ u003C \ / a \ u003E \ n \ u003C \ / p \ u003E \ n \ u003C \ / div \ u003E“”“
print(html.replace("\\/", "/").encode().decode('unicode_escape'))
答案 11 :(得分:0)
其他答案对此有所提示,但是问题可能是由于期望字节对象引起的。在Python 3中,当您有一个类字节对象时,解码有效。在解码之前运行编码可能会“解决”问题,但这是无用的一对操作,将问题提示给上游。