【发布时间】:2020-09-18 04:58:50
【问题描述】:
我正在使用 net/mail 使用 Go 阅读电子邮件:
msg, _ := mail.ReadMessage(f)
subject := msg.Header.Get("Subject")
fmt.Printf("Subject = %v", subject)
当主题包含特殊字符并且邮件提供商将其从纯文本转换为编码文本时,我无法弄清楚如何解码主题。
例如,如果发送一封带有“这是一个测试”的电子邮件——注意这是一个正确的大引号——那么该主题最终会被 UTF-8 编码,我认为是十六进制值:
=?UTF-8?Q?It=E2=80=99s_a_test?=
我的问题是:
描述这里发生的编码的正确术语是什么?
我会使用什么库将上面的字符串 (
=?UTF-8?Q?It=E2=80=99s_a_test?=) 解码回It’s a test,然后再执行我需要执行的操作(显示它、将其放入数据库等)
【问题讨论】:
-
您的问题与 Go 无关,但与处理电子邮件的 RFC 有很大关系。
-
(我已经删除了
utf-8标签(并用mime替换它)因为主题的真正编码是所谓的“Q-encoding”(还有“B- encoding"); 格式的“UTF-8”位定义在从 Q 或 B 编码解码后应根据哪种编码来解释实际字节。)