Email 主题编码电子邮件(RFC2047)。解码错误
我正在Golang编写应用程序。我需要解码电子邮件主题 原始主题:Email 主题编码电子邮件(RFC2047)。解码错误,email,go,Email,Go,我正在Golang编写应用程序。我需要解码电子邮件主题 原始主题: s := "=?utf-8?B?RG9tLmV1IC0gcmFwb3J0IHogZWtzcG9ydHUgb2fFgm9zemXFhCBuaWVydWNob21vxZtjaQ==?=" fmt.Println(RFC2047.Decode(s)) // Dom.eu - raport z eksportu ogłoszeń nieruchomości 拉波特·埃克斯波特·奥戈斯泽·涅鲁科莫奇 编码主题: =?utf-8?B?R
s := "=?utf-8?B?RG9tLmV1IC0gcmFwb3J0IHogZWtzcG9ydHUgb2fFgm9zemXFhCBuaWVydWNob21vxZtjaQ==?="
fmt.Println(RFC2047.Decode(s))
// Dom.eu - raport z eksportu ogłoszeń nieruchomości
拉波特·埃克斯波特·奥戈斯泽·涅鲁科莫奇
编码主题:
=?utf-8?B?RG9tLmV1IC0gcmFwb3J0IHogZWtzcG9ydHUgb2fFgm9zemXF?= =?utf-8?B?hCBuaWVydWNob21vxZtjaQ==?=^M
解码主题:“Raport z Eksortu ogłosze▒ ▒ 尼鲁科莫ści”
我使用github.com/famz/rfc247解码电子邮件主题
我的代码很简单:
RFC2047.Decode(msg.Header.Get("Subject"))
为什么,解码后的主题是破碎的?其他主题被正确解码。这是一个编码错误的主题吗?该主题编码错误。 艺龙网被分成两个MIME编码的字(因为编码的行将大于76个字符),但它被分割在<<代码> 字符的中间。 如果将两个部分合并为一个编码字符串,则返回原始主题:
s := "=?utf-8?B?RG9tLmV1IC0gcmFwb3J0IHogZWtzcG9ydHUgb2fFgm9zemXFhCBuaWVydWNob21vxZtjaQ==?="
fmt.Println(RFC2047.Decode(s))
// Dom.eu - raport z eksportu ogłoszeń nieruchomości
如果您使用的是Go 1.5,则可以使用的新功能 如果您使用的是较旧版本的Go,则可以使用 例如:
package main
import (
"fmt"
"mime" // When using Go 1.5
mime "gopkg.in/alexcesaro/quotedprintable.v3" // When using older Go versions
)
func main() {
s := "=?utf-8?B?RG9tLmV1IC0gcmFwb3J0IHogZWtzcG9ydHUgb2fFgm9zemXF?= =?utf-8?B?hCBuaWVydWNob21vxZtjaQ==?="
dec := new(mime.WordDecoder)
subject, err := dec.DecodeHeader(s)
if err != nil {
panic(err)
}
fmt.Println(subject)
// Output:
// Dom.eu - raport z eksportu ogłoszeń nieruchomości
}
在空闲时间我写了这个函数。函数连接字符串的各个部分并返回一个字符串
func parseSubject(s string) string {
patternType := regexp.MustCompile("(?i)=\\?.*?\\?.*?\\?")
resType := patternType.FindString(s)
if resType == "" {
return s
} else {
pattern := regexp.MustCompile("(?i)=\\?.*?\\?.*?\\?|\\s+|\\?=")
res := pattern.ReplaceAllLiteral([]byte(s), []byte(""))
return resType + string(res) + "?="
}
}
看起来像是将一个UTF-8字符一分为二。@Tomwide:是的,我提到过这就是为什么这个单词被拆分了,尽管不正确。@Tomwide:哦,76chars(78-CRLF)只是每行的建议。您可以跨多行折叠标题:请参见中的2.3.3