次のスニペットはISO-8859-1
、エンコードされたテキストを に変換しますUTF8
。ここで何が起こっているのか正確にはわかりません。誰かがなぜこれが機能するのか説明できますか?
var utf8Buf bytes.Buffer
for _, b := range iso8859Slice {
utf8Buf.WriteRune(rune(b))
}
utf8Str := utf8Buf.String()
次のスニペットはISO-8859-1
、エンコードされたテキストを に変換しますUTF8
。ここで何が起こっているのか正確にはわかりません。誰かがなぜこれが機能するのか説明できますか?
var utf8Buf bytes.Buffer
for _, b := range iso8859Slice {
utf8Buf.WriteRune(rune(b))
}
utf8Str := utf8Buf.String()
ループは is8859Str スライスの各バイトを取得し、それが型であると仮定します[]byte
iso-8859-1 は Unicode の最初の 256 コード ポイントとして組み込まれているため、実際に iso-8859-1 から Unicode に変換する必要はありません。
ただし、Unicode ルーン文字を UTF-8 でエンコードする必要があります。これは Buffer.WriteRune() によって行われます
WriteRune は、Unicode コード ポイント r の UTF-8 エンコードをバッファーに追加します。
最初:文字列型の場合は機能しませんiso8859Str
!
しかし iso8859Str
、タイプが []byte の場合、range
句はバイトを反復し、それが Unicode の設計方法です。ISO 8859-1 のバイトは、同じ Unicode コードポイントに対応します。