gpt4 book ai didi

email - 在 Golang 中解码引用可打印的电子邮件

转载 作者:数据小太阳 更新时间:2023-10-29 03:26:16 24 4
gpt4 key购买 nike

当您在 Gmail 的 html 电子邮件中连续键入两个空格时,如果您查看电子邮件的来源,它会将其编码为可引用的可打印正文“=C2=A0”。

根据这个 stackoverflow 答案,由于 UTF-8 编码,解码时应将其转换为 00A0 (n​​bsp):https://stackoverflow.com/a/2774507

但是,在 Golang 中,这不是它的工作方式:

s := `Text Text Text.=C2=A0 That's just two spaces`

r := strings.NewReader(s)

qpReader := quotedprintable.NewReader(r)

all, _ := ioutil.ReadAll(qpReader)

str := string(all)

fmt.Println(strings.Index(str, "\xC2\xA0"))

这会输出“15”,这是 Playground 链接:https://play.golang.org/p/8n6L7dlZPt

它不会在那里使用 NBSP,而是保留\xC2 并生成“Text Text Text That's just two spaces”。

将其正确呈现为\x00A0 的最佳方法是什么?

最佳答案

正如 Volker 在他的评论中所解释的那样,Go 字符串只是一个 byte slice 段。在您的情况下,它已经编码为 UTF-8,这是 Go 的默认编码。要访问实际的 Unicode 代码点(Go 术语中的 runes),请使用如下内容:

// Prints 15.
fmt.Println(strings.IndexRune(str, '\xA0'))

// Prints A0.
fmt.Printf("%X\n", []rune(str)[15]);

如何正确呈现字符串取决于您要呈现它的位置。但在大多数情况下,您可以按原样传递它,因为它已经是 UTF-8 格式了。

关于email - 在 Golang 中解码引用可打印的电子邮件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40905551/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com