• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:正規表現で日本語文字化け)

正規表現で日本語文字化け

このQ&Aのポイント
  • winxpでrubyの勉強をしていますが、正規表現により分割した日本語の文字列を処理するときにどうしても文字化けしてしまいます。
  • 環境はwinxp pro,activeruby 1.8.6, RDE 1.1.1.1です。
  • 正規表現で名前と金額を別々の配列に格納していますが、日本語の文字列が文字化けしてしまいます。$KCODE=Ksを記載し、SJISのファイルを使用しています。どのような点に留意すればよいのか、認識に間違いがあるかご指摘ください。

質問者が選んだベストアンサー

  • ベストアンサー
noname#60065
noname#60065
回答No.3

>if /(\w+)\s+(\d+)/e =~line このeはeucのeです。 これを付けると$KCODEの値に関係なくeucとして扱われてしまいます。 参考URLのオンラインリファレンスをお読みください。

参考URL:
http://www.ruby-lang.org/ja/man/html/_A5EAA5C6A5E9A5EB.html#a.c0.b5.b5.ac.c9.bd.b8.bd.a5.ea.a5.c6.a5.e9.a5.eb
51gk
質問者

お礼

ありがとうございます。 正規表現部分はサンプルコードをそのまま打っており、 全く気がつきませんでした($KCODEの指定以外の理由が 思いつきませんでした) ご丁寧にありがとうございます

その他の回答 (2)

  • sakusaker7
  • ベストアンサー率62% (800/1280)
回答No.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
  • ベストアンサー率62% (800/1280)
回答No.1

>if /(\w+)\s+(\d+)/e =~line なんで e をつけてるの?

関連するQ&A