• ベストアンサー

ShiftJIS 「脳」の文字コード

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);

質問者が選んだベストアンサー

  • ベストアンサー
  • g_p_
  • ベストアンサー率53% (28/52)
回答No.2

こんにちは、 文字コードは 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 を拒否ればいいみたいですね。ベンチマークとってみたらえらい早かったです。 勉強になりました。

k17s
質問者

お礼

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

その他の回答 (1)

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

C:\Documents and Settings\All Users>perl -e "print qq{\x94\x5c\x94\x5d }" 能脳 945c は 脳 じゃなくて 能 では?

k17s
質問者

お礼

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

関連するQ&A