0
當您在Gmail中的HTML電子郵件中的某一行中鍵入兩個空格時,如果您查看電子郵件的來源,它會將其編碼到quoted-printable正文中,如「= C2 = A0」 。在Golang中解碼引用打印的電子郵件
因爲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」,這裏的遊樂場鏈接:https://play.golang.org/p/8n6L7dlZPt
而不是它使用NBSP那裏,它將保持\ XC2,並導致「文本文本TEXTA這只是兩個空格」。
什麼是最好的方式來正確呈現這\ x00A0?
一切都很好。您應該閱讀更多關於Unicode的內容,並以UTF-8表示。你想要一個不可破解的空間U + 00A0,你得到一個,因爲U + 00A0是_encoded_ _as_ UTF-8是字節序列0xC2A0(不是「已翻譯」)。一切都很好,引用的打印工作正常,你有你的nbsp。添加一個'fmt.Println(str)'並檢查Playground中的輸出,它會呈現一個 HTML實體,因爲你有一個nbsp。閱讀https://blog.golang.org/strings和谷歌的「絕對最低限度每個軟件開發人員絕對積極必須瞭解Unicode和字符集」。 – Volker
順便說一句:「正確渲染爲\ x00A0的最佳方法是什麼?」最可能的是_wrong_ _question_。 U + 00A0是unicode代碼點(In Go - 說一個「符文」,一個抽象字符),並且您希望以任何UTF-8編碼字符串將此符文編碼爲0xC2A0。包unicode/utf8有助於將符文從/轉換爲代碼點,如果你真的需要(你不)。 – Volker
謝謝大家,非常有幫助。在我的應用的下一個步驟中發現服務缺乏對UTF的支持,這只是一個紅鯡魚。 –