• 締切済み

perlで半角カナを検索するには、どうしたらいいのでしょうか?

perl初心者です。 下記のようなファイルがあったとします。 パナソニック(ナショナル) 三菱電機 日立 東芝 SONY 下記のように、書きました while (<IN>) { use Jcode; Jcode::convert($_, 'euc'); chomp; $line+=1; Jcode::convert($_, 'euc'); if ($_=~ /\x8E/) { print "行=$line $_\n"; } } できあがったファイルは、下記のように、半角カナではなく、字化け状態になってしまいました。 行=2 姉鰭電機 行=4 東芝 よろしくお願い致します。

みんなの回答

  • okmotokun
  • ベストアンサー率59% (92/155)
回答No.4

EUC にコンバートできてないです。 データはファイルから読み込んでいますか。 スクリプトの中でSJISで配列を作って、それを読み取ってその文字列をEUCにコンバートするのはうまくいかないようです。 ※ use Jcode; はループの外にした方が良いのでは(実害は無いけど) ※ 何で Jcode::convert($_, 'euc'); を2回やってるのかな? 【HINT】 次のSJISコードの文字列を%エンコードすると右のようになります。 三菱電機 → %8E%4F%95%48%93%64%8B%40 姉鰭電機 → %8E%6F%95%68%93%64%8B%40 東芝 → %93%8C%8E%C5 「三菱電機」が「姉鰭電機」になる原因は次のエンコード間違い。 %4F → アルファベット O %6F → アルファベット o %48 → アルファベット H %68 → アルファベット h

  • Suzi
  • ベストアンサー率38% (130/334)
回答No.3

 メモ帳やワードパッドなどの文字コードは「shift_jis」になっているので、Jcode::convert($_, 'euc'); でeucで出力すると文字化けするのではないでしょうか。  Jcode::convert($_, 'shift_jis'); ではどうでしょうか。  

  • sakusaker7
  • ベストアンサー率62% (800/1280)
回答No.2

>if文なしで、printすると、 とありますが、これは質問にあるスクリプト同様 Jcode::convertは 実行しているのでしょうか? もしそうだったとして、ただ単に入力をそのまま出力しても同様の 文字化けが発生しますか? あとは、Jcode::convert で入力文字コードの指定をしてみるとか。

trouble09
質問者

補足

ご回答、有難うございます。 申し訳ございません、文字化けは、有りませんでした。 ただ、半角カナを抽出する為に、if ($_=~ /\x8E/) の条件で、printしたのですが、出力されたのが、下記の2行になってしまいました。 行=2 三菱電機 行=4 東芝 while (<IN>) { use Jcode; chop; $line+=1; Jcode::convert(\$_, 'euc', 'sjis'); Jcode::convert(\$_, 'sjis', 'euc'); if ($_=~ /\x8E/) { print "行=$line $_\n"; } } よろしくお願い致します。

  • Suzi
  • ベストアンサー率38% (130/334)
回答No.1

出力しようとしているhtmlのcharsetが、またはそのcgi自体の漢字コードがshift_jisになっていませんか。

trouble09
質問者

補足

ご回答、ありがとうございます。 普通の、メモ帳などで、作成したテキストファイルなのですか。 何か、操作をしないといけないのでしょうか? if文なしで、printすると、下記のように、やはり三菱電機が文字化けしています。 行=1 パナソニック(ナショナル) 行=2 姉鰭電機 行=3 日立 行=4 東芝 行=5 sony 行=6 その他 よろしくお願い致します。

関連するQ&A