xibbarこと藤岡です。

>   (6) クライアント(ブラウザ)からの入力
> 
> (6) これは私の知識が足りないところです。requestに含まれる情
>      報には適切な(信頼できる)エンコーディング情報がついている
>      のでしょうか。ついているのであれば、内部エンコーディング
>      へencode()してやればよいわけですが。
> 
> このことから考えると、Railsの設定ファイルに、
> 
>    * アプリ内部エンコーディング
>    * データベース(ごとの)エンコーディング
> 
> を、(たぶんデフォルトはUTF-8で)設定できるようにしてやれば、
> 外部インタフェースとしては十分のような気がします。で、Rails
> 内部で必要に応じてencode()しまくるんでしょうね。
> 
> さて、大量に見落としがある気がして不安なのですが、みなさんの
> ご意見を聴かせてください。上記のアイディアが寝言でないと思え
> たら、Railsチームに提案します。
> 
この6についてはcgi.rbでも大分悩みました。
cgi.rbの結論としてはデフォルトの入力エンコーディングを
定義することなんですが、考慮がいろいろと足りていないと思います。
そして、まつもとさんが同じことを考えていたようですが、
私としてはいいのかどうか微妙です。
本当にしっかりやるのであれば、
1. 受けたときのencodingはASCII-8BITにする
2. 変換したいencodingがある項目はアプリ側で把握し、
   UTF-8へのforce_encodingを試みる
3. 変換後、encodingのチェックをして、おかしいのは例外を投げる
が理想的だと思います。
一緒にaccept-encodingみたいな列挙項目をpostしてもらうとか。

# ちなみに、encode()はASCII-8BITでは例外なので、
# cgi.rbでは全く使っていない。