当您在Gmail中的html电子邮件中连续输入两个空格时,如果您查看电子邮件的来源,则会将其编码为引用可打印的正文“= C2 = A0”。
根据此stackoverflow答案,由于UTF-8编码,解码后应转换为00A0(nbsp):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并导致“文本文本文本只是两个空格”。
将此正确呈现为\ x00A0的最佳方式是什么?
答案 0 :(得分:0)
正如Volker在他的评论中解释的那样,Go字符串只是一个字节片段。在你的情况下,它已经编码为UTF-8,这是Go的默认编码。要访问实际的Unicode代码点(Go lingo中的符文),请使用以下内容:
// Prints 15.
fmt.Println(strings.IndexRune(str, '\xA0'))
// Prints A0.
fmt.Printf("%X\n", []rune(str)[15]);
如何正确呈现字符串取决于要呈现它的 where 。但在大多数情况下,你可以按原样传递它,因为它已经是UTF-8。