From: Yukihiro Matsumoto Date: 2008-09-01T09:06:57+09:00 Subject: [ruby-list:45465] Re: Ruby 1.9における異なるエンコーディングの文字列の結合 まつもと ゆきひろです In message "Re: [ruby-list:45464] Ruby 1.9における異なるエンコーディングの文字列の結合" on Mon, 1 Sep 2008 08:32:45 +0900, rubikitch@ruby-lang.org writes: |Ruby 1.9で異なるエンコーディングの文字列を結合するとエラーになりますが、 |将来的にレシーバのエンコーディングに変換して結合するようになりますか? |あるいは、そのようなメソッドを新設する予定はありますか? |もちろん相互変換可能という条件つきで。 |もしレシーバがUS-ASCIIならば引数のエンコーディングになるものとします。 どちらかがASCIIの範囲内の文字しか含まず、もう一方がASCII互換 のエンコーディングであった場合、結合は成功します。って、きっ とそういう意味じゃないんですよね。 |予定がないとしたら、どういう問題があるのでしょうか? 「暗黙の変換は行わない」というのがRubyの基本的ポリシーだから です。歴史的な事情その他から変換が本当に正しいかどうかは人間 にしかわからないので、結合のような基本的な操作で変換を暗黙に 行うのは危険だと考えます。 もちろん、「もっとユーザに優しく」とか「エンコーディングを意 識せずに」とかいう主張の「気持ち」は理解できるので、提案があ れば耳を傾けるつもりはあります。 たとえば、今回話題になってるARGVのエンコーディングについてで すが、現在は「ARGVに渡される文字列のエンコーディングはバイナ リ」ではなくて、localeに従うようになっています。localeに設定 されたエンコーディングでファイル名を記述している限り、UNIX系 OSでは発生しない問題なのですね。 で、WindowsでもGetACP()を使ったコードページを指定しているよう に見えるので、(現在では)実際はバイナリにならないんじゃないか と思います。もしかしたら、この方が使ってらっしゃった1.9のバー ジョンが古いのかもしれません。1.9.1に向けて日々進化中ですから。 ついでながら、これは「バイナリに適切なエンコーディングを付加 する」という話なので、「異なるエンコーディングを変換して処理」 では解決できない種類の問題ですね。バイナリは外からエンコーディ ング情報を付加してやらないと変換できませんから。 guessは興味深いアプローチです。暗黙に行うと変換以上にダメージ があるのですが、明示的に行うぶんには便利だと思います。が、あ らゆるエンコーディングのguessを行うルーチンを組み込みにするの は、まだ障害がありそうです。ライセンスのような非技術的なもの も含めて。 まつもと ゆきひろ /:|)