From canada@kt.rim.or.jp Tue Mar 24 19:24:57 1998 Path: kt.rim.or.jp!not-for-mail From: canada@kt.rim.or.jp (Masakatz Canada) Newsgroups: fj.lang.perl Subject: Re: 2バイト文字の検出 Date: 5 Mar 1998 14:57:20 GMT Organization: RIMNET Lines: 48 Message-ID: <6dmegg$sa7$1@news.kt.rim.or.jp> References: <6djmjk$9el$1@tetoron.imel.kyoto-u.ac.jp> NNTP-Posting-Host: ppp371.kt.rim.or.jp Mime-Version: 1.0 Content-Type: Text/Plain; charset=ISO-2022-JP X-Newsreader: WinVN 0.99.7J PL01 (x86 32bit) Xref: kt.rim.or.jp fj.lang.perl:3019 かなだです。 In article , danjou@osk.3web.ne.jp says... >>文字列 $string の中に、2バイト文字が含まれているかどうかを検出したい >>のですが、どうすればいいでしょうか。 >つまり、英語なのか、日本語なのか、っていう事なんですが。 ちょっと反則ですけど --- begin list --- #!/usr/local/bin/perl # 'euc','jis','sjis','ascii','binary'のいずれかを表示。 require 'jcode.pl'; # Ver.2.3使用 $text = join("",<>); # ここは適当に... $code = &jcode'getcode(*text) || 'ascii'; print "$code\n"; --- end list --- という手もあります。このままだと全文メモリに読んじゃいますけど。 んで、jcode.plのコードをお手本に書き直すと、 --- begin list --- #!/usr/local/bin/perl $re_jp = '\e\$[\@B]'; $re_asc = '\e\([BJ]'; $re_kana = '\e\(I'; while(<>){ $code = 'japanese',last if(/$re_jp|$re_asc|$re_kana/o); # JIS $code = 'binary' ,last if(/[\000-\006\177\377]/); $bin++ if(/[\200-\376]/); } $code = $code || ($bin ? 'japanese' : 'ascii'); print "$code\n"; --- end list --- てな感じですかね?短いデータや英語以外の外国語だと誤判定が出るで しょうけど、英語か日本語かを調べるのには十分だと思います。 -- か な だ ま さ か つ canada@kt.rim.or.jp