- ベストアンサー
「シフトJIS X 0213」形式の文字コードチェック
Javaにて「シフトJIS X 0213」で定められている下記の文字を判断したいです。 (参照: http://www.eonet.ne.jp/~kotobukispace/ddt/jisx0213/sjis8xxx.html) ・第3水準 ・第4水準 ・予約 ・使用不可 実現方法としては、文字列を「シフトJIS X 0213」にエンコードして、 エンコードした文字のバイトを判断するのが妥当だと思いますが、 Javaにて「シフトJIS X 0213」にエンコードすることは可能でしょうか。 sunの「サポートされているエンコーディング」の一覧を見ても「シフトJIS X 0213」 はサポートされていないように見受けられます。 (参照: http://www.ingrid.org/java/i18n/encoding/) 仮に「シフトJIS X 0213」にエンコード出来ない場合、 他の方法にて実現する方法等ありましたらご教授願います。 【動作環境】 OS:Windows Vista Business JRE:1.5.0_10
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
>Javaにて「シフトJIS X 0213」にエンコードすることは可能でしょうか。 質問文のリンク先を読んでみましたが、X 0213はまだサポートされていないようですね。 JavaのUnicode文字を単にShift_JISにエンコードすれば第1水準・第2水準の文字は判断できますが、第3水準・第4水準については難しそうですね。 また、予約・使用不可というのは文字ではなく、使えないコード範囲なのですから、Unicode文字には予約・使用不可に変換される文字は無いでしょう。
その他の回答 (2)
- thamansa
- ベストアンサー率40% (95/232)
JIS規格の「Shift_JIS」には、NEC拡張文字とIBM拡張文字が入っていなくて、それらを含めた文字コードはMS932またはWindows-31Jという文字コードです。 str.getBytes("Windows-31J");
お礼
thamansa様、No.1の答えに重ね、ご回答真にありがとうございます。 ご教授いただきました方法によって実現することが出来ました。 この度は真にありがとうございました。
- _ranco_
- ベストアンサー率58% (126/214)
第3水準・第4水準文字は、SJISでgetBytes()すると0x3f、すなわちASCIIの'?'文字になります。
補足
ranco様、ご回答真にありがとうございます。 ANo.1のthamansa様の回答より、Shift_JISにエンコードすることで、「第1水準」「第2水準」の判断がつくと認識しました。 str.getBytes("shift_jis"); より、Shift_JISにエンコードする方法を取り、動作確認レベルで検証を行いましたが、 0x8740~0x8775の「第1水準」の文字(機種依存文字でしょうか?)が変換不能になり、0x3F(63)が返却されてしまいます。 何か良い解決策をご存知ないでしょうか。。。 質問ばかりで申し訳ありません。
補足
thamansa様、ご回答真にありがとうございます。 私の質問文の書き方が悪く、真意が伝えきれておりませんでした。 真意としては、対象の文字に禁則文字(※1)が含まれているか否かを判断したいのです。 Shift_JISにエンコードすることで、「第1水準」「第2水準」の判断がつくのであれば、 エンコード出来ない文字は、禁則文字(※1)として判断出来る認識で良いでしょうか。 (※1)「シフトJIS X 0213」で定められている下記の文字 ・第3水準 ・第4水準 ・予約 ・使用不可