From: Yukihiro Matsumoto Date: 2008-09-25T06:19:21+09:00 Subject: [ruby-dev:36533] Re: Encoding.default_internal のためのパッチ まつもと ゆきひろです In message "Re: [ruby-dev:36532] Re: Encoding.default_internal のためのパッチ" on Thu, 25 Sep 2008 06:03:31 +0900, "U.Nakamura" writes: || 以下のような仕様を考えています。 | |びっくり仰天な感じですが、しばらく考えないとよくわかんなさそ |うです。 |実質的に、UTF-8化へ利用者を導くことになりそうですが、それも意 |図のうちだということですよね? そういうことです。なんという方針変更。 |「encから外す」というのはどういう意味でしょうか? |「データロスなしに変換できる」という言葉があるということは、 |変換はサポートするけど変換した結果得られる文字列は単なるバイ |ナリ列としてrubyは扱う、ということでしょうか? そういう意味です。より正確にはUTF-16はバイナリではなく、ダミー エンコーディングになるでしょう。できることは似たようなもんで すが。 |混乱のデメリットが大きいそうなことは否定しませんが、CSVライブ |ラリがUTF-16対応に苦労するというのはそもそもrubyのm17n機能が |不完全なのではないかという気がします。 |混乱とかいう話よりも、UTF-16だろうがなんだろうが自然に扱える |ようにするコストが問題なんだと言われると、受け入れるしかない |ですが... 「不完全ではないか」という指摘には、その通りと答えざるをえま せん。具体的には"text=#{str}"のようなケースで、strがUTF-16だっ たりするとうまくいきません。あと、正規表現もリテラルでマッチ できませんし。要するに今のM17NではASCII コンパチでないエンコー ディングを直接扱うところは十分でなく、近い将来(1.9.1 とか 1.9.2)で完成する見込みもないので、直接UTF-16テキストを扱うこ とは(当面)サポートしなくてもよいのではないか、という意味です。 |以下は完全な私事ですが、私の手元には膨大なUTF-16LEのデータが |存在します。 |つい先日もtrunkのm17n機能を使って処理したのですが、何の問題も |なく(というのは嘘で、open時にバイナリ指定が必要と怒られてちょ |っと困りましたが)処理できてとても嬉しかったです。 |私のユースケースではUTF-16LEでのデータの入出力は日常のことで |あり、rubyのm17n機能に期待するのは何よりもUTF-16LEのデータを |自然に扱えることでした。 今後はコマンドラインオプションで「-E UTF-16LE」とか指定してい ただくか、openで明示的に open(path, "r:UTF-16BE") と指定すると、ファイルの内容はUTF-8に変換されて読み込まれ、処 理後、出力するとUTF-16LE に変換されて出力することになります。 |これができないようになるのであれば、私にとっては非常に残念な |決定ということになります orz 個人的には「UTF-16→UTF-8→UTF-16」モデルで十分であり、かつ ASCII互換問題を回避できることの嬉しさの方が大きいと思っている のですが(正規表現とかも比較的自然に使えるようになるし)、いや、 それでもUTF-16をそのまま変換なしに扱える方が良いのだというこ とであれば、ぜひ指摘してください。 まつもと ゆきひろ /:|)