
ロシア文字の排除をしたいと思い、
以下のように記述してみたのですが
カタカナの「ヤツ」「ヤッ」に以下でマッチングしてしまいます。
文字コードはShift-jisを使用しているのですが
誤判定を回避する策はないでしょうか?
roshia_moji=qw(А Б В Г Д Е Ё Ж З И Й К Л М Н О П Р С Т У Ф Х Ц Ч Ш Щ Ъ Ы Ь Э Ю Я а б в г д е ё ж з и й к л м н о п р с т у ф х ц ч ш щ ъ ы ь э ю я);
foreach (@roshia_moji) {
if (index($a,$_) >= 0){
push(@error, 'ロシア文字は使用できません。');last;
}
}
No.1ベストアンサー
- 回答日時:
通常、Shift_JISの2バイト文字は「2文字」として処理されます。
'ヤツ'は2文字ではなく、 "\x83\x84\x83\x63" の4文字です。
同様に、このロシア文字も2バイト文字なので、それぞれが2文字扱いです。
ここで、'с'は"\x84\x83"です。
この"\x84\x83"がヤの2バイト目+ツの1バイト目と一致します。
対策は、次のどちらかになります。
・2バイト文字を考慮するものを利用する。場合によっては自作する。
・Encodeモジュールを使って、 utf8文字列にdecodeする。
utf8文字列にすれば、多バイト文字でも「1文字」扱いになるので、index等が普通に使える。
なるほど、そのような理由だったのですね。
utf8で試してみたのですが、たぶん私の記述に問題があったのだと思うのですが
誤判定が多かったので、これに2バイト目が83で終わる文字すべてを指定して
その文字があったらロシア文字として扱わないようにしました!
どうもありがとうございました!!
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
バイナリとBCDコード
-
COBOLのCOMP形式について
-
cprintf()関数で2バイト文字を...
-
10Mバイトて文字数に すると何...
-
UTF-8で5~6バイトになる文字コ...
-
VB.NET LeftBの代用
-
Javaで日本語1文字のバイト数
-
COBOL PICTUREで X,S,Vの意味
-
VB6で漢字の1バイト目か2バイト...
-
ピクセル,dpiから容量(バイト...
-
任意のアルファベットの2進表...
-
text型の文字数
-
「1TB」のHDDに日本語は何字入...
-
データの取り出し?
-
char str[256]の256の意味は?
-
windowsのファイルパス最大文字数
-
iconv変換後のサイズについて
-
CRC計算方法
-
printfの%eで指数部分の桁数を...
-
PNGを24bppBMPに変換したいので...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
UTF-8で5~6バイトになる文字コ...
-
COBOLのCOMP形式について
-
10Mバイトて文字数に すると何...
-
char str[256]の256の意味は?
-
「1TB」のHDDに日本語は何字入...
-
ピクセル,dpiから容量(バイト...
-
バイト列とバイナリ列の違いが...
-
エクセルシート名の制限を変更...
-
文字コードの利点・欠点について
-
日付時刻を4バイトに
-
機種依存文字をチェックしたい。
-
ビットスワップとバイトスワッ...
-
バイナリとBCDコード
-
UCS-2の一覧表が欲しい
-
sedコマンドで全ての2バイト文...
-
VBAでShift-JISのURLエンコード
-
3バイト文字(UTF-8)をprintfで...
-
URLは最高何文字まで可能なので...
-
シフトJISの2バイト文字
-
この関数はどのプログラミング...
おすすめ情報