金光です。どもっ。

On Thu, 12 Sep 2002 17:18:51 +0900
Shinji Miura <snj / users.sourceforge.jp> wrote:

> はじめまして、三浦@大阪電通大と申します。

はじめまして (_ _)

> 
> HTML出力の部分の
> 
> >      cgi.header({"charset"=>"shift_jis"})
> 
> で、まさに文字セット(charset)の設定を行っています。
> 金光さんの報告によりますと、HTTPのヘッダとして
> 
> > Content-Type: text/html; charset=shift_jis
> 
> と出力されていることから文字セットの指定自体は成功しています。

場所は、ここでいいのでしょうか


> ですが、cgi.rbその物は出力される文字列の文字コードを
> エンコードしてくれません。よって、ソースファイルの文字コードと
> charsetで指定されている文字コードとが一致していないために
> 文字化けが起こった可能性が考えられます。
> 
> 対処法としてはソースファイルの文字コードそのものを
> shift_jisに変換するか、あるいはプログラム中でNKFモジュールを使って
> 出力する文字列の文字コードを変換する方法があります。

えと、使用環境を書いていませんでした。Windows XP PROで
いまはもっぱらFrontPageを使っています。

もしかしたら、cgi.rbがシフトjisでないコードを出力しているの
かもしれませんね


> NKFモジュールの使用方法は
> 
>   http://www.ruby-lang.org/ja/man-1.6/?cmd=view;name=NKF
> 
> をご参照下さい。

ありがとうございます。

一応、今は、↓のようにしているのですが、
──────────────────────────────────────
require "cgi"
require "dbi"

# フォームの値をハッシュで取得
cgi = CGI.new("html3")
params = cgi.params

# データベースに接続
dbh = DBI.connect('dbi:OCI8:', 'ruby', 'oci8')


sql = "insert into sample01 (SongName, SongLength_s) VALUES (?, ?)"
dbh.prepare(sql) do | sth | 
  1.upto(13) { |i| sth.execute("Song #{i}", "#{i*10}") }
end 






# SQL文
sql = "select * from sample01"

# 検索キーワードが指定されている場合の処理
sql += %q( where SongName=? ) if params['KEYWORD'] == nil

# SQLの設定
sth = dbh.prepare(sql)
sth.bind_param(1, params['KEYWORD'][0]) if params['KEYWORD'] == nil

# 設定されたSQL文を実行
sth.execute

# レコードの取得
str = ""
sth.fetch_hash do |record|
  str += record.inspect + "\n"
end


# HTMLの出力
cgi.header({"charset"=>"shift_jis"})

cgi.out() do
  cgi.html() do
    cgi.head { cgi.title{"TITLE"} } +
    cgi.body() do
      cgi.form() do
        cgi.textarea("get_text") +
        cgi.br +
        cgi.submit
      end +
      cgi.pre() do
        CGI::escapeHTML(
          "検索文字列は#{params['KEYWORD'][0].inspect}です\n" +
          str
        )
      end
    end
  end
end

# データベースを閉じる
dbh.disconnect
──────────────────────────────────────
こういう、場所の問題でないのかも。。。 

こうすると、charsetうんたらの生出力はなくなりますが、文字化けは
なおりません。

ううう、いったいどこに置くのが本当なんだろう?

一応、NKFをあたってみます。シフトJISにこだわっているわけではないので
あれですが、とりあえず、charsetをEUCにしてみるのもやってみます。


> 
> もし、期待通りの内容の回答でなかった場合は申し訳ありません。
> --------------------------------------------------------------
> 「三浦真磁」

いえ、壁にぶちあたっていたので、なんか進めるような気がしてきました。


M.Kanemitsu
―――――――――――――――
金光雅夫 masao-k / a-net.email.ne.jp

http://www.masao-k.net
http://isweb14.infoseek.co.jp/art/soshikon/
http://isweb15.infoseek.co.jp/computer/ruby256/
〒216-0031 川崎市宮前区神木本町5-14-12
自宅: 044-877-5006
携帯: 090-2753-5292