Perlについての質問です。


ある、HTMLファイル(S-JIS形式保存)で、書かれたファイルが1000ファイルほどあり、その中に「ある単語」が存在するかどうかをマッチで調べています。

マッチはEUCでなければ、動作しないとの事なのでEUCにHTMLと「ある単語」を変換して比較をしています。

ここで、ある問題が起きました。

EUCに変換する際に、SJIS上の文字がEUCでは別の文字になってしまい、変な文字がひっかかってしまうのです。

そこで、SJISそのままでマッチをする方法はないか、質問致します。

環境は、
Windows XP SP2
Perl ver 5.8.8
です。

回答の条件
  • URL必須
  • 1人20回まで
  • 登録:
  • 終了:2007/04/23 17:55:03
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答2件)

id:kidd-number5 No.1

回答回数117ベストアンサー獲得回数15

ポイント35pt

>マッチはEUCでなければ、動作しない

というのがどういうことなのかよくわかりませんが・・・

内部的にunicodeに変換してから両者を比較すればよいと思います。

http://www.fl.reitaku-u.ac.jp/~schiba/perl/perlEncoding.html

id:zachouR

すいません、どこかのサイトだったとおもうのですが、「マッチの場合はEUCにする。」

と書いてあったので。

自分の勘違いでした。

2007/04/16 18:10:03
id:b-wind No.2

回答回数3344ベストアンサー獲得回数440

ポイント35pt

Perl 5.8.x Unicode�֘A

Perl 5.8 以降ではマルチバイトに対応していますから SJIS のままで記述、正規表現のマッチは出来ますよ。


スクリプトの最初の方で、

use encoding 'shiftjis';

とかやっておけば標準入力を SJIS として受け取ってくれます。


ファイルを open するときはこう。

open FILE, '<:encoding(shiftjis)', 'sample.txt';
id:zachouR

ありがとうございます!

うまく行きそうです!

2007/04/16 18:10:23
  • id:b-wind
    >どこかのサイトだったとおもうのですが、「マッチの場合はEUCにする。」
    UNICODE に変換しない場合は今でもそうです。
    http://www.din.or.jp/~ohzaki/perl.htm#JP_EUC_JP
    「そもそも日本語文字列には対応していないが、EUC_JP ならとりあえず動く」というのが無難な解決方法でした。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません