2019年9月アーカイブ

Go言語における文字列はUTF-8のバイト列を保持します。また、Unicodeの1符号位置に対応するデータ型としてruneというものが用意されており、これは32ビット整数と同じものです。他の言語でいうchar型にあたります。

Rustでも類似の形です。つまり、文字列型はUTF-8のバイト列を保持し、Unicodeのスカラー値に対応する型としてcharが定義されています。(ここでわざわざ「スカラー値」といい「符号位置」としていないのはRustのドキュメントがそうしているせいで、まあほぼ同じようなものですが、サロゲート上位下位の範囲の値を含まない点だけが違います)

こうなるとUTF-16の出る幕がない感じになってきます。今後、JavaやC#のように「文字列はUTF-16、char型は16ビット」というものから、こちらの方式へシフトしてくるのでしょうか。JavaなどはUnicodeのBMPにしか文字の割り当てのなかった頃に設計されたので、当時ならこうだろうなというのは分かります。

ちなみにRubyは文字列の内部コードはひとつのものに限定されませんが、Unicodeの使用ではUTF-16でなくUTF-8が普通なので、GoやRustと近い形といえるでしょう。ただしchar型にあたるものはありません。

広告