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

SJISの「脳」の文字コードは?
\x94\x5C

しかし、場合によって読み込んだ文字の文字コードを表示させると\x94\x5Dになってしまいます・・・。
:例:
「脳内」のみを書いたSJISテキストファイル
「力脳」のみを書いたSJISテキストファイル

文字コードの取得方法に誤りがあるのでしょうか?

use strict;
use warnings;

use strict;
use warnings;

open(FH,"text.txt") or die($!);
while (my $buff= <FH>){
while($buff=~ /([\x81-\x9F\xE0-\xEF\xFC-\xFE][\x40-\x7E\x80-\xFC])/){
my $two_byte_sjis = $1;
$two_byte_sjis =~ s/\x5C$/\x5C\x5C/; #スクリプト上エラーがでないようエスケープ
my $replace = $two_byte_sjis;
$buff=~ s/$replace//g; #無限ループしないよう$buffから削除
print "$replace => ";
$replace =~ s/(.)/sprintf('%X', ord($1))/eg;
print "$replace\n";
}
}
close(FH);

A 回答 (2件)

C:\Documents and Settings\All Users>perl -e "print qq{\x94\x5c\x94\x5d


}"
能脳

945c は 脳 じゃなくて 能 では?
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
Σとんでもない凡ミスでした・・・

お礼日時:2007/09/01 18:04

こんにちは、



文字コードは unpack ですかね
print unpack "H2" , $char;
みたいな。

で、この質問とは直接関係なくて前の質問のヤツなんですけど、
ちょっと勉強してみました。

my $ASC = qr/[\x00-\x7F\xA1-\xDF]/;
my $LEFT = qr/[\x81-\x9F\xE0-\xFC]/;
my $RIGHT = qr/[\x40-\x7E\x80-\xFC]/;
my $MULTI = qr/$LEFT$RIGHT/;

$str =~ s/((?:$ASC|$MULTI)? $LEFT \x5C)(?!\x5C)/$1\x5C/gmxo;

でいいみたいです。
要は、#1 moon_piyo氏の回答に、否定の先読みで \x5C を拒否ればいいみたいですね。ベンチマークとってみたらえらい早かったです。
勉強になりました。
    • good
    • 0
この回答へのお礼

こ、これはすごい・・・。
否定の先読みだけでこうまでも変わるんですね・・・。
考えてみれば当たり前なんですが、考えてすらいませんでした(汗
本当に感謝です!

お礼日時:2007/09/01 18:22

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