成瀬です。

どうも読者に発散してしまったような印象を与えているようなので、
現時点をまとめておきます。

(2010/04/30 11:42), Yukihiro Matsumoto wrote:
> (1) Rails本体についてはASCIIのみにしなさいと言いたいところで
>      す。そんなに困難ではないと思うのですが。

そうですね。

> (2) プラグインもASCIIのみにするか、そうでなければプラグインが
>      提供するエンコーディングを明示することを求めたいところで
>      す。ASCIIのみでない場合、ユーザアプリとプラグインのエンコー
>      ディングが一致しない場合、そのプラグインは使えないという
>      のは厳しすぎる制約でしょうか。

ASCII compatible な encoding なら OK だとよいですね。

> (3) ユーザアプリは自分が内部エンコーディングとして用いるエン
>      コーディングをひとつ決める必要があるとします。テンプレー
>      トはそのエンコーディングで記述しなければなりません。
>
> (4) ユーザコードも同様です。マジックコメントなしでも内部エン
>      コーディングで記述しているとみなしてあげると親切かもしれ
>      ません。

コードはダメにしましょうよ。

テンプレートはまぁよいかなというか、たぶん今のままで動きます。
ERB はテンプレートを eval してごにょごにょするわけですが、
eval は String の encoding を source encoding と仮定するわけで、
default_external 経由でファイルから読んだときにテンプレートの
入った String は目当てのエンコーディングになっているはず。

> (5) データベースは難しい問題ですが、データベースのエンコーディ
>      ングを指定して、内部エンコーディングに明示的にencode()す
>      ることになるのではないでしょうか。

ドライバレベルでの対応が必要なわけですが、これは行われつつあると。

> (6) これは私の知識が足りないところです。requestに含まれる情
>      報には適切な(信頼できる)エンコーディング情報がついている
>      のでしょうか。ついているのであれば、内部エンコーディング
>      へencode()してやればよいわけですが。

通常 request 単体では存在しないので、埋め込むようにするか、
アプリケーション側から与えてやる必要があります。

> このことから考えると、Railsの設定ファイルに、
> 
>    * アプリ内部エンコーディング
>    * データベース(ごとの)エンコーディング
> 
> を、(たぶんデフォルトはUTF-8で)設定できるようにしてやれば、
> 外部インタフェースとしては十分のような気がします。で、Rails
> 内部で必要に応じてencode()しまくるんでしょうね。

そんな感じだと思います。

> さて、大量に見落としがある気がして不安なのですが、みなさんの
> ご意見を聴かせてください。上記のアイディアが寝言でないと思え
> たら、Railsチームに提案します。

で、おおむねここまでの議論でカバーできていると思うんですが、
Rails びと的には問題を切り分けできていないように思うので、
彼らにはまずデータベースのドライバが適切なものになっているかの確認を
徹底させるのがよいかと思います。
というか、Rails 3 側でドライバのバージョン見た方がいいんじゃないかな。

とりあえずこれでかなり地雷が減ると思うので、データベース周りが綺麗に
なったところで改めて残った問題を見るとよいかと思います。

-- 
NARUSE, Yui  <naruse / airemix.jp>