質問 |
||
| 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 |
|
| |
| この回答へのお礼 | この回答にお礼をつける(質問者のみ) |