GoStrings (Japanese)

"GoStrings" from golang wiki

Go公式WikiのGoStringsの日本語意訳になります。
(元記事の最終更新日: 2014/12/10 rev.1)


Goの文字列

文字列はUTF-8である必要はありません。GoのソースコードはUTF-8である必要があります。
この2つの間には複雑な経路が存在しています。

簡単にいうと、文字列には3種類あります。
それらは、

  1. 文字列リテラルへと字句解析されたソースコードの部分文字列。
  2. 文字列リテラル
  3. string型の値

であり、1番目だけが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

string型の値(表示不可、これはUTF-8のストリームになります)のデータは以下のようになります。

ff
e8
aa
9e

そして証明のため、文字(コードポイント)は以下のようになります。

<もしこの文字の値を全て見ていくと、不正になるバイト FF は U+FFFD として現れます。>

語 U+8a9e

訳注: Go PlayGroundで確認

 
comments powered by Disqus