ライブラリの国際化について
Unicodeの助けを借りるのが現実的かつ常識的。とりあえず思いつきそうなアプローチは、
- 文字列の内部表現はワイド文字、入出力はマルチバイト文字
- 内部表現・入出力ともにマルチバイト文字
の2点。内部表現にワイド文字を使う場合、2byteしか割いていない処理系/実装を考慮すると基本的にBMPで定義されている文字しか扱えない。内部表現でもマルチバイト文字、というと日本語Shift_JISの0x5c問題等を解決するためにUTF-8/UTF-16を用いる必要がある。多々ある文字コード<-->UTF-8の変換を行うにはUnicodeを噛ませるのが現実的*1。
問題はwchar_tのサイズの違いによってコーディングに差が出てくるか?ということ。多少大変になるくらいで、標準関数の助けを借りればそんなに問題はないハズ(自信ナシ)。もう一つは変換テーブル(マップの仕方)の違いによってコーディングに差が出てくるか?ということで、これは"/"-->"\"等のローカルルールを考慮しないといけなくなる。
あと処理系/実装に関する問題点は、
- wchar_tの扱いがダメ
- localeのサポートがダメ
- C/C++標準関数がダメ
下二つが当てはまると無理。sizeof(wchar_t)が1とかいう状況でなければ一番上はあまり問題にはならない、かな?
できそうな感じもするが…、Windowsのmbstowcs()の吐くワイド文字は将来的にも通用するのか?とかwchar_tを組み込み型で扱えないのは痛い、とかいろいろあるので傍観するのがいいのかなぁ?
根本的な考え方が間違っていてもっといい方法があるに決まっている。けど、そろそろ文字コードについて考えるのやめよう…。
*1:というかUTF-8はISO/IEC 10646の符号化方式なので…。