When you type a two spaces in a row in an html email in Gmail it encodes it into the quoted-printable body as "=C2=A0 " if you look at the source of the email.
According to this stackoverflow answer, because of the UTF-8 encoding this should be converted to 00A0 (nbsp) when decoded: https://stackoverflow.com/a/2774507
However, in Golang, this isn't how it works:
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"))
This outputs "15", here's the Playground link: https://play.golang.org/p/8n6L7dlZPt
Instead of it using an NBSP there, it will keep the \xC2 and result in "Text Text Text That's just two spaces".
What's the best way to correctly render this as \x00A0?
As Volker explained in his comment, a Go string is simply a slice of bytes. In your case, it's already encoded as UTF-8 which is Go's default encoding. To access the actual Unicode code points (runes in Go lingo), use something like:
// Prints 15.
fmt.Println(strings.IndexRune(str, '\xA0'))
// Prints A0.
fmt.Printf("%X
", []rune(str)[15]);
How to correctly render the string depends on where you want to render it. But in most cases, you can pass it as is since it's already in UTF-8.