Go Wiki: GoStrings
文字列はUTF-8である必要は**ありません**。GoのソースコードはUTF-8であることが**必須**です。この二つの間には複雑な経路があります。
要するに、文字列には3種類あります。それらは
- 文字列リテラルに字句解析されるソースの部分文字列。
- 文字列リテラル。
- string型の値。
UTF-8である必要があるのは最初のものだけです。2番目のものはUTF-8で記述する必要がありますが、その内容は様々に解釈され、任意のバイトをエンコードする可能性があります。3番目のものは、どんなバイトでも含むことができます。
これを試してください
var s string = "\xFF語"
ソースの部分文字列: "\xFF語"、UTF-8エンコード。データ
22
5c
78
46
46
e8
aa
9e
22
文字列リテラル: \xFF語 (引用符の間)。データ
5c
78
46
46
e8
aa
9e
文字列値 (表示不可能; これはUTF-8ストリームです)。データ
ff
e8
aa
9e
そして記録のために、文字 (コードポイント)
<erroneous byte FF, will appear as U+FFFD if you range over the string value>
語 U+8a9e
このコンテンツはGo Wikiの一部です。