- PR -

文字コードチェックについて

1
投稿者投稿内容
ぱすぱす
会議室デビュー日: 2005/10/04
投稿数: 2
投稿日時: 2005-10-04 15:43
みなさんはじめまして、ぱすぱすと言います。

表題の文字コードチェックについて教えていただきたいのですが

入力情報に対して、S-JISの第一水準と第二水準+登録された外字(文字コード固定)
以外の入力情報をチェックしたいのですが、どのようにすればよいでしょうか?

第三水準と第四水準の文字を判別できるような関数とかがあれば、良いのかもと思いましたが、そのようなものもあるのでしょうか?
それとも、第一水準と第二水準を判別して、さらに外字コードを判別、それ以外をエラーとするような仕組みがいいのでしょうか?
その際の関数や、作り方を乗せているサイトがありましたら、ご教授ください。

何分初めての質問なので、ご無礼がありましたら、ご容赦ください

よろしくお願い致します
ルーツ
常連さん
会議室デビュー日: 2004/03/15
投稿数: 22
お住まい・勤務地: 神奈川〜東京
投稿日時: 2005-10-04 17:02
S-JISの文字コードチェックをしてくれる機能は無いっぽいので自分で作るしかないでしょう。
(私も過去に探したクチです。)
入力情報のStringをtoCharArray()でcharの配列に変換して
for文で回しながらエラーとする文字の範囲を指定して
チェックしてみてはどうでしょうか。

コード:
public boolean isValidateString(ServletRequest request) {
  String param = request.getParameter("hoge");
  char[] ch = param.toCharArray();

  for (int cnt = 0; cnt < ch.length; cnt++) {
    // 半角カナだったらfalseを返す
    if (ch[cnt] => 0x00A0 && ch[cnt] <= 0x00FF) {
       return false;
    }
  }
  // 半角カナが無ければtrue
  return true;
}



使用禁止文字などに関しては↓を参照されるとよろしいかと思います。
http://www.shurey.com/Soft/JavaScript/font2.html
べう
会議室デビュー日: 2004/01/23
投稿数: 17
投稿日時: 2005-10-04 17:40
これはサーブレットに特化した話なんでしょうか?
汎用的に書くのであれば、Java の文字列になった時点で既に Unicode (UTF-16? UCS-2?) ですよね? で、Unicode では第一水準・第二水準漢字だのはバラバラ状態にマップされるので判別などはまずできません。なのでやはり Shift_JIS だか Windows-31J だかの byte 列に直してやってそのコードを自分で判別するということですよね。String s に対して

byte[] bytes = s.getBytes("Shift_JIS");

byte[] bytes = s.getBytes("MS932");

そして、上手いこと Shift_JIS だか Windows-31J だかのバイトの対になったら、後は範囲で判定ですよね。第一水準・第二水準・外字はそれぞれほぼ固まっているから、そんなに難しくはないですね。
ぱすぱす
会議室デビュー日: 2005/10/04
投稿数: 2
投稿日時: 2005-10-04 19:02
るーつさん、べうさん、ありがとうございました。

J2EEやJ2SE等の関数でないかな?(自分で探したところでは無かったので。。。)
また、無かったらどなたか作って落ちてないかと思い質問させていただきました。

やはり、自分で文字コードを指定して、チェックするしかないようですね。。。残念

みなさまありがとうございました。
1

スキルアップ/キャリアアップ(JOB@IT)