藤岡です。

>> 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の時点で例外なような。
という話はさておき、
newするときのオプションで期待する挙動を切り替えられると
使いやすいでしょうかね?

cgi=CGI.new(:encoding=>"UTF-8",:element_encoding_check=>true)

みたいに。