今回は、Unicodeの1文字(正確にはコードポイント)を読み書きする関数、そしてUTF-16の文字列の長さを求める関数を定義します。今回も同様、C++11以降かつint型が32ビットの処理系を仮定しています。

まずは関数の定義に必要になる定数を定義します。

それではこれらの定数を使って、それぞれの関数を定義していきます。

Unicodeの1文字をUTF-16の列として書き込む

Unicodeの1文字をOutputIteratorに書き込みます。本来であれば、OutputIteratorのvalue_typeはchar16_tでなければならないのですが、unsigned short型やwchar_t型などでも使えるようにチェックしていません。

UTF-16の列からUnicodeの1文字を読み込む

次は先ほどの逆で、InputIteratorからUnicodeの1文字を読み込みます。先ほど同様、あえてInputIteratorのvalue_typeはチェックしていません。

UTF-16文字列の長さを求める

最後にUTF-16文字列の長さ(コードポイント数)を求める関数を定義します。サロゲートペアの片側しかない場合も1コードポイントとして数えています。


元ネタ

↑ 7. 文字・文字列・文字コードに関する関数・テンプレート