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の一部です。