[Subject Prev][Subject Next][Thread Prev][Thread Next][Subject Index][Thread Index]
[webdav-jp:0778] glibc への CodePage 932 追加について (Re: Apache 2.0.46 へのパッチ適用に付いて)
- To: webdav-jp@xxxxxxxx
- Subject: [webdav-jp:0778] glibc への CodePage 932 追加について (Re: Apache 2.0.46 へのパッチ適用に付いて)
- From: MORIYAMA Masayuki <msyk@xxxxxxxxxxxxxxxxx>
- Date: Sat, 5 Jul 2003 18:32:06 +0900
- Delivered-to: webdav-jp@Begi.net
- Posted: Sat, 05 Jul 2003 18:32:04 +0900
森山です。
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