1

次のスニペットはISO-8859-1、エンコードされたテキストを に変換しますUTF8。ここで何が起こっているのか正確にはわかりません。誰かがなぜこれが機能するのか説明できますか?

var utf8Buf bytes.Buffer
for _, b := range iso8859Slice {
  utf8Buf.WriteRune(rune(b))
}
utf8Str := utf8Buf.String()
4

2 に答える 2

2

ループは is8859Str スライスの各バイトを取得し、それが型であると仮定します[]byte

iso-8859-1 は Unicode の最初の 256 コード ポイントとして組み込まれているため、実際に iso-8859-1 から Unicode に変換する必要はありません。

ただし、Unicode ルーン文字を UTF-8 でエンコードする必要があります。これは Buffer.WriteRune() によって行われます

WriteRune は、Unicode コード ポイント r の UTF-8 エンコードをバッファーに追加します。

于 2013-09-18T11:45:49.550 に答える
1

最初:文字列型の場合は機能しませんiso8859Str!

しかし iso8859Str、タイプが []byte の場合、range句はバイトを反復し、それが Unicode の設計方法です。ISO 8859-1 のバイトは、同じ Unicode コードポイントに対応します。

于 2013-09-18T11:46:00.923 に答える