No.277 | 投稿日時: | 2005/03/07(月) 01:02 <↑親記事:No.276> |
投稿者: | 森山 将之 |
まず、libiconv の本家へのマージに関してですが、他の方にもプッシュしてもらったのですが、あまり芳しくありませんでした。
私が英語で直接やり取りできれば、いろいろと打つ手はあるとは思うのですが、私が直接やりとりしていないため、こちらの意図を十分伝えきれていないのかなという感じです。
eucJP-msに関しては、すでに日本ベンダ協議会により作られたものだったので、それを利用できましたが、JISコード(ISO-2022-JP)に関しては、「XML日本語プロファイル」で、x-iso2022jp-cp932 というものがあるのですが、次の点がネックとなってしまっています。
----------------
参考 2 いったんシフトJIS又は日本語EUCを経由するからといっても, [IETF RFC 1468]が許していない文字が使用できるわけではない。たとえば,x-sjis-cp932は, NEC特殊文字, NEC選定IBM拡張文字, IBM拡張文字, ユーザ外字を表現できるが,x-iso2022jp-cp932がそれらの文字を表現できるわけでははない。
----------------
CP50220/CP50221/CP50222 のいずれかを実装する事も考えた事がありますが、ユーザー定義文字をエンコードできないとか、一般的にあまり実態が知られていないエンコーディングの為、イマイチだと感じています。
仕方が無いので、ISO-2022-JP-MS というものを独自に定義して実装する事を考えています。
iconv(3) では純粋にエンコーディング変換だけを行う事とし、NEC特殊文字, NEC選定IBM拡張文字は JIS X 0208 のエスケープシーケンス、JIS X 0201 片仮名は ESC ( I、ユーザー定義文字は ESC $ ( ? にしたいと考えています。
ESC $ ( ? は、JIS X 0202:1998 (ISO/IEC 2022:1994) の次の規定を利用します。
-----------------------
13.3.3 私用 どのエスケープシーケンスにおいても, 終端バイトの Fp (すなわち, 03 の列) は, 私用のため保留とする。私用のためのエスケープシーケンスは, ISO 2375 の登録対象外とする。これらは, 交換当事者間の合意によって定義する。
-----------------------
ISO-2022-JP-MS は、CP50220/CP50221を受け入れ可能で、CP50220/CP50221 では、考慮外のユーザー定義文字に関しても、ISO-2022-JP-MS の実装を行っていればやりとりが可能となります。
libiconv 用には、お試しパッチを作成してあり、glibc に関しては最近になって、実装を始めた所です。
Linux では、glibc を使っているので、日本語ロケール、iconv(3) での変換で SJIS/EUC-JP/ISO-2022-JP をMS系で統一する事も可能になってきます。
ただ、「Linux における日本語ロケールに関する指針」では次のような事も書かれていて、ja_JP.eucJP の実態を eucJP-ms にする事に対して、好ましい事ではないのかなとも考えてしまいます。
----------------------
補足: この文字コードの定義は「日本語 EUC」以外の文字コードの利用を
禁止するものではない。ユーザの設定により他の文字コードに切り換える
ことができた方が望ましい。あくまでも利便性のために、「文字コードと
して少なくとも日本語 EUC が利用できること」「デフォルトを日本語 EUC
にすること」を推奨するものである。また他の環境との互換性のため外字
を必要とする場合には ja_JP.eucJP ではなく別の名前を使用することが望
ましい。
----------------------
ただ ja_JP.eucJP ではない別の名前を使用するとなると、ロケール名を直接参照しているようなソフトの修正が必要となるなど、いろいろと面倒な事になるので、現実的ではないのではないかという印象を持っています。
個人的には、MS系文字コードで統一した環境を構築できるようにしたいと考えています。