From: "NARUSE, Yui" Date: 2004-11-12T19:34:25+09:00 Subject: [ruby-dev:24793] Re: NKF(nkf2)を1.8ブランチに入れました naruseです。 Kazuhiro NISHIYAMA wrote: > どちらが以前と同じ挙動なのかはわかっていないのですが、 > 1.8.1の頃のnkfとの互換性を優先させるというのが良いのでは > ないでしょうか? 互換性は確かに大きな要素だと思います。 標準や有力な実装と矛盾しない場合や、どの実装に従うか迷った時、 互換性は判断基準になりますね。 ちなみに、デフォルトで EUC(fcf1)→Shift_JIS(eeef) が、 以前、そして現在の実装です。 MoonWolf wrote: > http://www.opengroup.or.jp/jvc/cde/sjis-euc.html > このあたりが、参考になるのかな? > > 今回の問題にどの用に反映すべきかまでは考えがまとまっていませんが、 > とりあえず情報として提供します。 おぉ、その文書の、 [4] 日本語EUCとシフトJIS間のコード変換とコード系名 [4.1] 日本語EUCとシフトJIS間のコード変換 注記: 3.に 「日本語EUCからSJISへの変換において  IBM 拡張文字から NEC選定IBM拡張文字への変換は行なわない.」 と、ありますね。 つまり、EUC(fcf1)→Shift_JIS(eeef)、と。 過去・現在の互換性と標準が一致しているので、そちらを優先し、 CP932互換性は、EUCとShift_JISの変換ではデフォルトでは切ることにします。 CP932互換の変換をしたい場合は、--cp932invオプションを指定してください。 参考までにサンプルを以下に載せて起きます。 NKF.nkf('-eS,"\xfa\x40") #=>"\xfc\xf1" #=>"\xee\xef"とみなして変換 NKF.nkf('-eS --no-cp932',"\xfa\x40") #=>"" #変換できないので空文字 NKF.nkf('-sE,"\xfc\xf1") #=>"\xee\xef" #IBM拡張文字 NKF.nkf('-sE --cp932inv',"\xfc\xf1") #=>"\xfa\x40" #NEC選定IBM拡張文字 ちなみにnkf1系のNKFモジュールの挙動は以下のとおり。 NKF.nkf('-eS,"\xfa\x40") #=>"" #変換できないので空文字 #--no-cp932 オプションは存在しない NKF.nkf('-sE,"\xfc\xf1") #=>"\xee\xef" #IBM拡張文字 # --cp932inv オプションは存在しない ### ただ、UnicodeからShift_JISの変換まで、 EUCとShift_JISの変換に引っ張られて、IBM拡張文字(\xee\xef)になるのは、 正直どうかと思うところではあります。 UnicodeとShift_JISの変換は、標準規格がなく、 CP932がデファクトスタンダートとなっているんですよね。 IconvはIBM拡張文字に変換するようですが、これについては、 CP932の方が権威があるみたいで。。 まぁ、とりあえず現状維持で行きます。 -- NARUSE, Yui DBDB A476 FDBD 9450 02CD 0EFC BCE3 C388 472E C1EA