Gmailのhtmlメールの行に2つのスペースを入力すると、メールのソースを見るとquoted-printable本体に「= C2 = A0」とエンコードされます。このstackoverflowの答えによるとGolangでquoted-printableメールをデコードする
、デコードされたとき、これは00A0(NBSP)に変換する必要がUTF-8エンコーディングのため: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」を出力し、ここでの遊び場のリンクがあります:代わりに、それはそこNBSPを使用してのhttps://play.golang.org/p/8n6L7dlZPt
、それは\ XC2を維持し、「ちょうど2つのスペースのテキストテキストTextÂ」になります。
\ x00A0として正しくレンダリングするにはどうすればよいでしょうか?
すべては問題ありません。あなたはUnicodeとそれをUTF-8で表現しています。あなたはU + 00A0の空き領域を必要とし、U + 00A0は_encoded_ _asです。UTF-8はバイトシーケンス0xC2A0です( "翻訳されていません")。すべてが良いです、quotedprintableはうまく動作し、あなたはnbspを持っています。 'fmt.Println(str)'を追加し、Playgroundで出力を調べると、nbspがあるので HTMLエンティティをレンダリングします。 https://blog.golang.org/stringsとgoogleを読んでください。「すべてのソフトウェア開発者が絶対に最低限、絶対にUnicodeと文字セットについて知っておく必要があります」 – Volker
BTW: "これを\ x00A0として正しくレンダリングするにはどうすればよいですか?"おそらく_wrong_ _question_です。 U + 00A0はUnicodeコードポイントです(Goで - 「ルーン」、抽象的な文字を表します)。このルーンを0xC2A0としてUTF-8でエンコードされた文字列でエンコードします。 unicode/utf8パッケージは、実際にコードポイントを必要とする場合は、コードポイントから/へコード変換するのに役立ちます(そうでない場合)。 – Volker
ありがとう、非常に参考になりました。私のアプリの次のステップで、UTFサポートの欠如がこのサービスに欠けていたことが判明しました。これは単なる赤ちゃんのことでした。 –