プロが教える店舗&オフィスのセキュリティ対策術

perlで文字化けを起こしているか否かを調べたい
毎回読み込んできる、文字列は、必ず、UTF-8なのですが、インターネット経由で情報を得ているため時々文字化けしていることがあります。
文字化けをしている場合、再度読み込みを行ったり、その文章を表示しないようにしたいのですが、文字化けしているか否かを知る方法はありますか?
ご存知の方、宜しくお願い致します。

A 回答 (2件)

#自信なしですが・


use Encode;

$text="怪しいテキスト";
$len_o=length $text;
$len_c=Encode::from_to($text,"UTF-8","UTF-8");
print "ok" if $len_o == $len_c;
    • good
    • 0

eval ブロックで Encoding::decode で第3引数の CHECK を Encode::FB_CROAK にして実行すれば文字化けしている場合に $@ に何かメッセージが入るのでそれで判別できます。



例) 標準入力から1行づつ読んで文字化けを判定するプログラム
(文字化けしていた場合は [\x00-\x1f\x7f-\xff] の文字は '\x' + 16進数2桁に変換して出力する)。

#!/usr/bin/perl -w

use strict;
use Encode;

while (defined(my $b = <>)) {
 chomp($b);
 my $b2 = $b;
 eval {decode('utf8', $b, Encode::FB_CROAK);};
 if ($@) {
  $b =~ s/([\x00-\x1f\x7f-\xff])/'\\x' . unpack('H2', $1)/ge;
  print "'$b': 文字化け。\n";
 } else {
  print "'$b2': Ok\n";
 }
}
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!