ようこそ ゲスト さん、新規登録(無料)して気になる疑問を解決しませんか?

質問

QNo.3987094 正規表現で日本語文字化け
質問者:51gk winxp でrubyの勉強をしていますが、正規表現により分割した日本語の文字列を処理するときにどうしても文字化けしてしまいます。
環境はwinxp pro,activeruby 1.8.6, RDE 1.1.1.1 です。実行しようとした内容は
”蛸 110円”など名前と金額の組み合わせが複数行乗っているテキストファイルを読み込、以下の正規表現で名前と金額を別々の配列に格納しています。

if /(\w+)\s+(\d+)/e =~line
menu[i]=$1
price[i]=$2
・・・

上記の処理では 変数line は正常に日本語を格納していますが、$1には”蛸”ではなく文字化けした状態で値がセットされています。
ソースの先頭には $KCODE=Ks を記載し、読み込むファイルもソースファイルもSJISで揃えました。
上記以外にどのような点に留意すればよいのか、そもそも認識が間違っている点があるかなどご指摘いただければと思います。よろしくお願いします。
困り度:
  • 困っています
質問投稿日時:
08/04/30 11:56
この質問に対する回答は締め切られました。

回答良回答20pt

ANo.3 >if /(\w+)\s+(\d+)/e =~line

このeはeucのeです。
これを付けると$KCODEの値に関係なくeucとして扱われてしまいます。

参考URLのオンラインリファレンスをお読みください。
回答者:noname#60065
種類:回答
どんな人:一般人
自信:参考意見
回答日時:
08/04/30 20:23
参考URL: http://www.ruby-lang.org/ja/man/html/_A5EAA5C6A5E9A5EB.html#a.c0.b5...
この回答へのお礼ありがとうございます。
正規表現部分はサンプルコードをそのまま打っており、
全く気がつきませんでした($KCODEの指定以外の理由が
思いつきませんでした)
ご丁寧にありがとうございます

回答

ANo.2 #!/usr/bin/ruby -Ks
i = 0
menu = Array.new
price = Array.new
DATA.each do |line|
if line.match(/(\w+)\s+(\d+)/)
menu[i] = $1
price[i] = $2
i += 1
end
end

p menu
p price

__END__
蛸 110円
烏賊 130円

実行結果:
>ruby186 -v okwave.rb
ruby 1.8.6 (2007-03-13 patchlevel 0) [i386-mswin32]
["蛸", "烏賊"]
["110", "130"]
回答者:sakusaker7
種類:回答
どんな人:経験者
自信:参考意見
回答日時:
08/04/30 16:40
この回答へのお礼この回答にお礼をつける(質問者のみ)

回答

ANo.1 >if /(\w+)\s+(\d+)/e =~line
なんで e をつけてるの?
回答者:sakusaker7
種類:補足要求
どんな人:経験者
自信:参考意見
回答日時:
08/04/30 12:15
この回答へのお礼この回答にお礼をつける(質問者のみ)