- ベストアンサー
Ruby 文字コード判別
NKF.guessで文字コードを判別し、そのコードがWindows-31J以外だったら エラーが出るようにしたいです Shift-JISの場合だと if(NKF.guess(str) == NKF::SJIS) この様に記述をして判別させています SJISの部分をCP932に変えて試してみましたが駄目でした 宜しくお願いします
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
たぶん、無理です。 NKFモジュールによる理由 ・NKFモジュールのエンジンであるnkf自体にSJISとCP932の区別がない(SJISしかない) 文字コードによる理由 ・二つに違いは、拡張文字の有無が主であり、ほとんどの文字はまったく同じ。 そのため、それらの拡張文字を使ってなければ区別できない。(たとえば、あなたの質問文にはそのような文字が無いため、区別できない) また、使っていたとしてもCP932以外の可能性もある。
その他の回答 (1)
- notnot
- ベストアンサー率47% (4900/10359)
回答No.2
SJISとWindows-31Jの違いは何だと認識していますか? Windows-31JはSJISのいくつかの文字の字形を変えて、JIS規格にない機種依存文字(ベンダー独自文字)を追加したものです。 字形の違いはコードを見ただけではわからないので無理というのは良いですよね。 ということで、 まず自動判定でSJISであることを確認して、/[機種依存文字]/ という正規表現で機種依存文字を探せばいいかと。Windows-31Jの機種依存文字にどんな物があるかは↓などを参照。 http://www2d.biglobe.ne.jp/~msyk/charcode/cp932/Windows-31J-charset.html そもそも「やりたいこと」を自分で理解出来てない可能性もありますね。目的は何ですか?
お礼
やっぱり無理なんですね NKF.guess以外で何か方法がないか考えてみます ありがとうございました