まつもと ゆきひろです

In message "Re: [ruby-dev:36532] Re: Encoding.default_internal   のためのパッチ"
    on Thu, 25 Sep 2008 06:03:31 +0900, "U.Nakamura" <usa / garbagecollect.jp> 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をそのまま変換なしに扱える方が良いのだというこ
とであれば、ぜひ指摘してください。

                                まつもと ゆきひろ /:|)