藤岡です。

>>>> 5. かまわず指定された encoding をつける
>>>>
>>>> じゃないですかね。
>>>> String#valid_encoding? で調べるとか、後で対処する方法はあるのですから。
>>> bad knowhow になりそうで怖いです。
>>>
>> bad knowhowになるぐらいだったら実装したいですね。
>>
>>> cgi = CGI.new('UTF-8')
>>> unless cgi.param.join.valid_encoding?
>>>   print cgi.header('status' => '400 Bad Request')
>>>   print 'Bad Request'
>>>   exit
>>> end
>>>
>>> 等のコードを毎度書くか俺ライブラリにする必要があるわけで。
>>>
>> これだとEUC-JPとUTF-8を送りつけられたときにjoinの時点で例外なような。
> 
> force_encoding されている、という前提なので、例外はないはず。
> 
>> newするときのオプションで期待する挙動を切り替えられると
>> 使いやすいでしょうかね?
>>
>> cgi=CGI.new(:encoding=>"UTF-8",:element_encoding_check=>true)
> 
> デフォルトチェックを希望。
> 混在したor不正なエンコーディングを受け付けることの方が例外的だと思います。
> アップロードされたバイナリはもともと除外な訳で。
> 
私としてはチェックを入れた方がいいと思っています。
cgi=CGI.new(:encoding=>"UTF-8",:element_encoding_check=>false)
こんな感じでできると楽かなと。
ファイルに関してはすべてASCII-8BITがいいと思っています。