From: Martin Duerst Date: 2008-01-30T19:51:58+09:00 Subject: [ruby-dev:33530] Re: nkf の CP932 At 15:11 08/01/30, NARUSE, Yui wrote: >成瀬です。 > >Martin Duerst wrote: >> CP932 の周りの文字コード変換を検討したところで、 >> http://nkf.sourceforge.jp/ucm/cp932.ucm をベースにしたいと思いましたが、 >> いくつか気になった点があります。ご意見・アドバイスをお願いします。 >> >> 1) Private Use Area の使用: >> \xF0\x40 |0 # PRIVATE USE AREA >> から >> \xF9\xFC |0 # PRIVATE USE AREA >> までに 7778行目から 9657行目までに 計 1880個あります。 >> これは下手するとゴミをばらまくだけなので、止めたいと思っています。 > >PRIVATE USE AREA の類は総じてゴミだという主張には同意します。けれども、 >NTT DoCoMo や Softbank の 携帯電話の SJIS 絵文字がこのエリアに割り当てら >れていまして、Unicode へ変換する際にちょうどこのマッピングを用いているの >で、この部分がないと困ると思います。 絵文字って 1880 もありますか。DoCoMo などはその辺もうちょっと しっかりして欲しいですよね。UTF-8 への変換はやっても、逆の変換は 元々どういうデータだったのか分からないためしない方がいいと思います。 >言い換えれば、すでにばらまかれてしまったゴミ(しかも無視できない量)を救 >済するために必要です。 > >> 2) 完全にデータを失う fallback。例えば >> \x21 |1 # INVERTED EXCLAMATION MARK とか >> \x41 |1 # LATIN CAPITAL LETTER A WITH GRAVE >> のように、文字が明らかに違うのに、fallback mapping を >> 行っているところは止めたいと思っていますが、どうでしょうか。 >> (そもぞもこれは多分 Microsoft のある API のある使い方によって、 >> fallback 付きのデータになってしまったと思います。) >> (fallback は又別途に色々考えられると思いますが、単なる文字コード変換 >> とは別に考えた方がいいと思います。) >> 完全には未だ分かりませんが、多分 http://nkf.sourceforge.jp/ucm/SJIS-nkf.ucm >> と同じぐらいの |1 のケースがのこるかと思います (主に SJIS 系で事実上全角と >> 半角があるのに Unicode にその区別がない少数の記号だけ)。 > >これもごもっともなのですが、「Microsoft のある API のある使い方によっ >て」は具体的には、「ある API」とは WideCharToMultiByte、「使い方」は >WC_NO_BEST_FIT_CHARS の有無なのですが、 まさにそうです。 >デフォルトが「指定なし」つまり、 >デフォルトで fallback を行うのです。 知っている人の間は WC_NO_BEST_FIT_CHARS 付き (すなわち fallback 無し) の方がいいとよく知られている。素人だと別だと思いますが。 >http://msdn2.microsoft.com/en-us/library/ms776420(VS.85).aspx > >そのような経緯から、この動作を期待しているアプリケーションも存在すると思 >うので、 例えばどういうものでしょうか。逆に、この fallback は iso-8859-1 しかカバーしてないので、「内容はともかく、とりあえず Microsoft と全く同じ」という場合以外は使えませんよね。 >残しておいた方がいいのではないかなぁと思います。 例えば HTML や XML のページを何かのエンコーディングで吐き出したいと 考えていると、 # LATIN CAPITAL LETTER A WITH GRAVE は A のではなく、À にしたいてすよね。前もって fallback を 全部いれるとそういうことはできなくなりますよね。 >なにか >String#encode に NO_BEST_FIT_CHARS 相当のオプションを与えた場合には >fallback を切るというのはアリだと思います。 将来に fallback みたいなものも追加してもいいと思いますが、あくまでも 普通は fallback 無しにしたいと思っています。 >> 3) 最初のバイトが ED/EE と FA/FB/FC とダブっているものがずいぶん多いが、 >> これは http://www.microsoft.com/globaldev/reference/dbcs/932.mspx >> にもそのまま載っているので残しておこうかなと思います。例: >> \xFC\x47 |0 # CJK UNIFIED IDEOGRAPH >> \xEE\xE8 |3 # CJK UNIFIED IDEOGRAPH >> 一回 UTF-8 とかに変換すると結果として FA/FB/FC の方が残ります。 >> 極めて少数ですが、 >> \x87\x82 |0 # NUMERO SIGN >> \xFA\x59 |3 # NUMERO SIGN >> 見たいに 87 と FA にあるものもあります。この場合に 87 が優先されます。 >> [もっとひどいとして、 >> \x81\xE6 |0 # BECAUSE >> \x87\x9A |3 # BECAUSE >> \xFA\x5B |3 # BECAUSE のケースもあります。] > >http://support.microsoft.com/default.aspx?scid=kb;en-us;Q170559 にもあり >ますが、歴史的経緯による仕様なので、これも残してほしいです。 ここは本当に CP932 の歴史・経緯の話なので、残す予定です。 宜しくお願いします。 Martin. #-#-# Martin J. Du"rst, Assoc. Professor, Aoyama Gakuin University #-#-# http://www.sw.it.aoyama.ac.jp mailto:duerst@it.aoyama.ac.jp