C++1y Unicodeライブラリの提案

N3572 Unicode Support in the Standard Library


Unicodeライブラリが提案されています。
このライブラリの特徴は、文字列をcharやwchar_tのような固定長の文字型のコンテナとしてではなく、コードポイント(文字)のコンテナとして定義しているところです。「"あいうえお"」という文字列があった場合、エンコーディングに寄らず、文字列のサイズを取得すると、コードポイントの数である5になります。


基本的な使い方は以下のようになります:

// UTF-8の文字列
encoding_string<encoding::utf8> s1(u8"あいうえお");

// システムの文字コードからUTF-8に変換
encoding_string<encoding::utf8> s2("あいうえお", encoding::system);

// 文字数を取得(5が入る)
size_t size = s1.codeunit_size();

従来のエンコーディングを規定しないcharはsystemエンコーディング、wchar_tはwideエンコーディングとして扱います。システムのAPIとやりとりする場合は、それらのエンコーディングに変換して渡すことになります。


イテレータがどのような定義になっているのかは、よく読み取れなかったのでここでは触れません。
入出力ストリームの演算子も挙動がよく読み取れなかったのですが、たとえばファイルへの出力の場合は指定されたエンコーディングを使用し、標準出力への出力の場合は、システムのエンコーディングを使用する、というようなことは内部でやってくれるのかが気になるところです。それができない場合は、自分でシステムエンコーディングのencoding_stringに変換してからcoutに渡す必要があります。