Python:这个编码是什么以及如何解码?

2023-12-20

我有很多来自邮件正文的字符串,打印如下:

=C3=A9

例如,这应该是“é”。

这种编码到底是什么以及如何解码它?

我正在使用 python 3.5

EDIT:

我设法通过应用以下方法对邮件正文进行正确编码:

quopri.decodestring(sometext).decode('utf-8') 

然而,我仍然很难让 FROM、TO、SUBJECT 等部分正确。

这就是我构建电子邮件的方式:

import imaplib
import email
import quopri


mail = imaplib.IMAP4_SSL('imap.gmail.com')
mail.login('[email protected] /cdn-cgi/l/email-protection', '*******')
mail.list()

mail.select('"[Gmail]/All Mail"') 



typ, data = mail.search(None, 'SUBJECT', '"{}"'.format('123456'))

data[0].split()

print(data[0].split())

for e_mail in data[0].split():
    typ, data = mail.fetch('{}'.format(e_mail.decode()),'(RFC822)')
    raw_mail = data[0][1]
    email_message = email.message_from_bytes(raw_mail)
    if email_message.is_multipart():
        for part in email_message.walk():
            if part.get_content_type() == 'text/plain':
                if part.get_content_type() == 'text/plain':
                    body = part.get_payload()
                    to = email_message['To']

                    utf = quopri.decodestring(to)

                    text = utf.decode('utf-8')
                    print(text)
.
.
.

我仍然得到这个:=?UTF-8?B?UMOpdGVyIFBldMWRY3o=?=


这就是所谓的“引用打印”编码。它由 RFC 1521 定义。其目的是用一系列正常、安全的字符替换不寻常的字符值,以便电子邮件系统可以安全地处理消息。

事实上,这里有两个级别的编码。首先是信'é'被编码为UTF-8,产生'\xc3\xa9',然后将 UTF-8 编码为可引用打印的形式'=C3=A9'

您可以使用以下命令撤消引用的可打印步骤decode or decodestring的方法quopri模块,记录于https://docs.python.org/3/library/quopri.html https://docs.python.org/3/library/quopri.html那看起来像:

    import quopri

    source = '=C3=A9'
    print(quopri.decodestring(source))

这将撤消引用的可打印编码并显示 UTF-8 字节'\xc3\xa9'。回到这封信'é'你需要使用decodestring 方法并告诉 Python 这些字节包含 UTF-8 编码,如下所示:

    utf = quopri.decodestring(source)
    text = utf.decode('utf-8')
    print(text)

UTF-8 只是将字母编码为字节的多种可能方法之一。例如,如果您的'é'已编码为 ISO-8859-1 它将具有字节值'\xe9'其引用的可打印表示形式将是'=E9'.

当您处理电子邮件时,您应该会看到内容类型标头告诉您正在发送的内容类型以及对邮件文本(或多部分邮件中的单个 MIME 部分)应用了哪种字母到字节编码。如果该文本随后通过应用引用打印编码再次编码,则该附加步骤应由内容传输编码标头。因此,您的带有 UTF-8 编码文本且以引用打印格式传输的消息应该具有如下所示的标头:

Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: quoted-printable
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python:这个编码是什么以及如何解码? 的相关文章

随机推荐

  • 回形针可以读取 S3 存储桶中的照片几何形状吗?

    我想从我的 S3 容器中读取照片的几何形状 当它在我本地时 这有效 def photo geometry style original geometry geometry style Paperclip Geometry from file
  • 如何使用 CSS2 选择器获取元素的第 n 个子元素?

    CSS2 中是否有可能获取有序列表的第 n 个元素 如同 nth child 在 CSS3 中 仅供参考 我正在尝试将 Parcheesi 的德语版本编程为兼容 XHTML 1 1 和 CSS2 并尝试使用有序列表生成游戏场 因此移动选项是
  • jQuery 如果 myDiv 是:可见,则将类添加到另一个元素

    我又开始接触 jQuery 了 显然我错过了一些东西 我想根据另一个元素是否可见向元素添加一个类 它隐藏着display none 并激活slideToggle 我有这个 if about me is visible about me cl
  • 如何使用本地开发 minikube 进入 Kubernetes 中的 postgres

    有人可以帮我吗 这是我在这里发表的第一篇文章 我真的很高兴开始在这里发帖并帮助人们 但我首先需要帮助 我正在 Minikube 上部署我自己的 Postgres 数据库 对于数据库 密码和用户名 我使用的是秘密 数据采用base64编码 P
  • 在基于服务器的代理中使用 REST 服务

    我们被要求构建一个基于 Domino 服务器的数据库 用于与远程非 Domino 服务器交换数据 可以使用 Web 服务连接到远程服务器 使用 R8 5 3 在 Domino 中创建 RESTful 服务似乎很简单 Internet 上有一
  • 为什么 StringBuffer 有 toStringCache 而 StringBuilder 没有?

    在 JDK 8 中 StringBuffer类有一个toStringCache while StringBuilder没有 A cache of the last value returned by toString Cleared whe
  • Flutter - 应用程序范围的通知

    是否有正确的方法可以从 Flutter 应用程序中的 根 页面或位置监听流 作用域模型 并在收到一些数据后在任何当前打开的页面 可能不是主页 上显示适当的通知 例如 Snackbar 我希望能够在整个应用程序中显示某些通知 而不仅仅是逐页显
  • 如何从 Dash 回调的数据帧中获取计数

    我想根据下拉列表中的回调选择来显示破折号布局中 div 内某些条件的计数 我能够获取 pandas 数据帧列中值的下拉列表 但我无法弄清楚如何显示该列中选定元素的总数 例如 我在 Jupyter Notebook 中编写了一个函数来获取计数
  • 切换类不绑定点击事件

    向我的按钮添加了一个类 并尝试在 onclick 事件后启动 但不起作用 非常简单的代码为什么事件没有绑定我做错了什么 http jsfiddle net davidThomas n2WUn 3 http jsfiddle net davi
  • 剪刀石头布

    我为我的计算机科学课程进行了一次测试 其中一个问题是制作一个剪刀石头布游戏 如果玩家 1 获胜 则返回 1 如果玩家 2 获胜 则返回 1 如果平局 则返回0 我编写了程序并运行了它 它起作用了 但据我的教授说 他说它不起作用 def rp
  • 为什么Python内置的“all”函数对于空可迭代返回True?

    我知道这是有充分理由的 但我想知道是什么理由 gt gt gt print all True 如果 all 旨在检查 iterable 上的每个项目的计算结果是否为 True 并且我们知道空列表的计算结果为 False gt gt gt b
  • 从 ActiveRecord 模型获取特定属性

    假设我有一个User具有属性的模型 id first name last name and email 在我的应用程序中 来宾用户不应该看到User s email and last name 如果我想要用户列表 我知道如何选择特定值 但我
  • 如何删除“<”和“>”之间的所有字符,包括“<”和“>”?

    我有字符串 window google ac h h y nghe l i h y nghe l i b i c lt i gt lt b gt 30 10 40 j 13 o h y nghe l i i b
  • 类定义和内存分配

    如果定义代表分配内存 为什么 C 中的类定义在实例化对象之前没有分配内存 C 类定义不分配内存 class就好像typedef and struct 您从哪里得到 定义代表分配内存 的想法 您能提供报价或参考吗 C 对象创建 通过new 分
  • Chrome 无法播放 mp3 文件?

    我的服务器上有一些非常奇怪的东西 chrome 无法在其上播放 mp3 文件 例如 当 chrome 指向第一台服务器上的 mp3 文件时 http tinyurl com czqfw5a http tinyurl com czqfw5a
  • 单击目标 c 中的按钮更改图像

    我在 xib 文件中拖动了 3 个按钮 分别为 btn1 btn2 btn3 最初我给了它们默认图像 first png 现在 当用户单击 btn1 时 btn1 的图像应从 first png 更改为 secondary png 当用户选
  • Plotly:如何向绘图表达图形添加水平滚动条?

    我开始了解更多关于plotly和pandas的知识 并且有一个多元时间序列 我希望使用plotly express功能来绘制和交互 我还希望我的绘图是水平滚动条 以便初始绘图适用于预先指定的初始时间间隔 这是我的示例 涉及三个时间序列以及
  • 如何使用画布在 ImageView 上绘制不受缩放影响的线条?

    我通过执行以下操作在 ImageView 上绘制线条 Bitmap imageBitmap BitmapDrawable imageView getDrawable getBitmap Bitmap duplicateBitmap Bitm
  • 如何在 laravel5.1 中使用用户输入的数据集合继续进行测验

    我会为此直接前进 这个问题与我通过的问题 https stackoverflow com questions 46355609 how to get a specific grade data using laravel eloquent
  • Python:这个编码是什么以及如何解码?

    我有很多来自邮件正文的字符串 打印如下 C3 A9 例如 这应该是 这种编码到底是什么以及如何解码它 我正在使用 python 3 5 EDIT 我设法通过应用以下方法对邮件正文进行正确编码 quopri decodestring some