[Subject Prev][Subject Next][Thread Prev][Thread Next][Subject Index][Thread Index]

[webdav-jp:0778] glibc への CodePage 932 追加について (Re: Apache 2.0.46 へのパッチ適用に付いて)



森山です。

At Sat, 5 Jul 2003 16:58:54 +0900,
> > Windows のコードページ 932 の変換と同じ変換を行うルーチンという
> > 事でしょうか?
> 
>   一緒かどうかは分かりませんが、具体的には Samba 日本語版(を参考にした
> iconv_hook) の MSSJIS⇔UCS2 変換テーブルをそのまま glibc 2.x の iconv 実装
> に転換した形になります。つまり、これを Glibc 2.x 環境で使えば Samba 3.0 も
> mod_encoding も改造なしで MSSJIS が使えるようになります。物が出来たら
> OpenI18N のメンバー経由で Glibc に取り込んでもらうつもりです。

すばらしい! ぜひお願いします。

ただ、次の事が気になっています。

Samba 日本語版は、Windows95 あたりのファイル名の取り扱いを元にし
ていますので、最近の WindowsNT/2000/XP のファイル名の取り扱いと
は異なります。
具体的には、Samba-ja は大文字のローマ数字と、No., TEL, (株) の 3 
文字について 115 区のコードを用いていますが、NT等 は 13 区を用い
るようになっています。

また、Win32 API の WideCharToMultiByte() と異なる変換をしている
ため、iconv() のようにファイル名以外のエンコーディング変換にも使
用するものを Samba 日本語版のファイル名のエンコーディング変換に
あわせてしまうと不都合が生じるかもしれません。

Java や Python Japanese Codec, Perl の最新の Encode, などの 
MS932/cp932 は、WideCharToMultiByte() (マイクロソフト サポート技
術情報 - JP170559) の変換と同一となっています。

あと、PostgreSQL の EUC_JP が Unicode との変換で、私の libiconv 
パッチの eucJP-ms と同等の変換である事を確認してあります。

PHP に関しては、SJIS-win -> EUC-win の変換をすると、大文字のロー
マ数字は、13 区が用いられるようになっていました。

こういう細かい所を気にしているのは、私くらいかもしれませんが…

Samba-ja の変換は、一般に公開されている情報から導き出す事は出来
ないため、Samba-ja の変換の存在を知らない所では、これと同一の変
換で実装されるという事は期待できないと思います。
よって、なるだけ公開情報を用いたり、元になっている Windows の変
換に合わせた方が良いのではないかと個人的には考えています。

libiconv パッチの eucJP-ms の変換は、cp932 で大文字のローマ数字
等は 13 区を用いている事と、Unicode を経由しない変換で EUC に変
換した場合など、13 区に変換される事などを考慮して、eucJP-ms でも 
13 区を用いるようにしてあります。
公開されている情報からは eucJP-ms で 13区を使うという事は導き出
せなかったのですが、Windows とのデータ交換を考えると、マイクロソ
フトの流儀に合わせて置いた方が、混乱が少ないのではないかと考えて
います。EUC-JISX0213 の EUCコードセット1 の 13 区とも互換が取れ
ますし。

>   なお、下記ページを参考に eucJP-ms も独自実装中です。この2つが揃って
> MSSJIS⇔eucJP-MS 相互変換が可能になり、ファイルシステム上のファイル/ディ
> レクトリ名を eucJP-ms で扱えるようになります。
> 
> 	http://www.opengroup.or.jp/jvc/cde/appendix.html

libiconv 1.8 のパッチは、Samba 3.0.0 beta で動作確認して、
cp932/eucJP-ms の両方とも良好な結果が得られています。

# Samba 3.0.0 はマルチバイトの扱いに関して、不都合な点があり、ま
# だまだ使えるというレベルにはありませんが、ファイル名の変換だけ
# に限ればという話なのですが…

私が libiconv 1.8 のパッチで採用した変換は次のページで解説してい
ますのでご参考まで。
一点だけ書き忘れたのがありまして、JIS X 0212 の BROKEN BAR が、
eucJP-ms では、FULLWIDTH BROKEN BAR となっているので、JIS X 0212 
の変換テーブルを euc-jp のものと共用する場合には、注意が必要とな
ります。

http://www2d.biglobe.ne.jp/~msyk/charcode/cp932/eucJP-ms.html

> # ただ…glibc の iconv 変換ルーチンのコードがトリッキー過ぎてよく分からない。
> # gdb でデバッグも出来ない…何とかしてよ > Ulrich

まだ実装できていないのでしたら、glibc 2.2.5 で、*とりあえず* 動
くものは作ってありますので、パッチを作ってお送りしましょうか?
それを参考に、トリッキーでないコードに書き直してもらったほうが速
いかもしれません。(私の行ったトリッキーな追加で、余計に混乱して
しまうかもしれませんが…)

# パッチを作るのにファイルを整理しなければならないので、ちょっと
# 時間がかかるかもしれません。
# また、とりあえず作ってみたら、動いちゃったというシロモノなので、
# おもいっきりバグを作り込んでいるかもしれません。
# あと、cp932 と eucJP-ms の変換テーブルで同じようなテーブルは 1 
# つにまとめた方がいいのかなと思っています。

‖ 森山 将之 (MORIYAMA, Masayuki) 
‖ E-Mail: msyk@xxxxxxxxxxxxxxxxx