三浦@大阪電通大です。

すいません、資料を読み直したのですが
CGIモジュールの使い方に関して大きな勘違いをしていました。

まず、CGIクラスのheaderメソッドですが、
これは単に設定されたHTTPのヘッダ用文字列を返すだけで
実際の出力は行いません。通常

cgi = CGI.new('html4')
puts cgi.header({'charset' => 'iso-2022-jp'})
puts '<html><title>hogehoge</title><body>fugafuga</body></html>'

のように使います。

で、outメソッドを用いる場合、ヘッダの設定は
outメソッドの引数にハッシュを渡してあげることで成立します。
よって、正解は

cgi = CGI.new("html3")

# データベースの処理をして

cgi.out({"charset" => "shift_jis"}) do
  cgi.html() do
		   ...
		   ...
		   ...

が正解でした。混乱させてしまい申し訳ありません。

ちなみに、
cgi.out do
  cgi.html do
    cgi.head do
      cgi.header({"charset"=>"shift_jis"})+
      ...
      ...
などとしてしまうと、htmlのHEAD要素内の文字列として
出力されてしまい妙なことになるわけです(^^;)。
--------------------------------------------------------------
「三浦真磁」
snj / users.sourceforge.jp