Go Wiki: GoStrings

文字列はUTF-8である必要は**ありません**。GoのソースコードはUTF-8であることが**必須**です。この二つの間には複雑な経路があります。

要するに、文字列には3種類あります。それらは

  1. 文字列リテラルに字句解析されるソースの部分文字列。
  2. 文字列リテラル。
  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の一部です。