Go公式WikiのGoStringsの日本語意訳になります。
(元記事の最終更新日: 2014/12/10 rev.1)
Goの文字列
文字列はUTF-8である必要はありません。GoのソースコードはUTF-8である必要があります。
この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
comments powered by Disqus訳注: Go PlayGroundで確認