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

NKF.guessで文字コードを判別し、そのコードがWindows-31J以外だったら
エラーが出るようにしたいです

Shift-JISの場合だと
if(NKF.guess(str) == NKF::SJIS)
この様に記述をして判別させています

SJISの部分をCP932に変えて試してみましたが駄目でした

宜しくお願いします

A 回答 (2件)

たぶん、無理です。



NKFモジュールによる理由
・NKFモジュールのエンジンであるnkf自体にSJISとCP932の区別がない(SJISしかない)

文字コードによる理由
・二つに違いは、拡張文字の有無が主であり、ほとんどの文字はまったく同じ。
そのため、それらの拡張文字を使ってなければ区別できない。(たとえば、あなたの質問文にはそのような文字が無いため、区別できない)
また、使っていたとしてもCP932以外の可能性もある。
    • good
    • 1
この回答へのお礼

やっぱり無理なんですね

NKF.guess以外で何か方法がないか考えてみます

ありがとうございました

お礼日時:2011/06/03 18:45

SJISとWindows-31Jの違いは何だと認識していますか?



Windows-31JはSJISのいくつかの文字の字形を変えて、JIS規格にない機種依存文字(ベンダー独自文字)を追加したものです。

字形の違いはコードを見ただけではわからないので無理というのは良いですよね。
ということで、
まず自動判定でSJISであることを確認して、/[機種依存文字]/ という正規表現で機種依存文字を探せばいいかと。Windows-31Jの機種依存文字にどんな物があるかは↓などを参照。
http://www2d.biglobe.ne.jp/~msyk/charcode/cp932/ …

そもそも「やりたいこと」を自分で理解出来てない可能性もありますね。目的は何ですか?
    • good
    • 0

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