- PR -

文字コードでの判定

投稿者投稿内容
たららん!
会議室デビュー日: 2001/11/25
投稿数: 10
投稿日時: 2002-10-21 05:23
お世話になります。たららんです。

JavaScriptにはcharAtcodeという関数で文字コードを取得することができます。
その取得した文字コードと数字で判定ができます。

var ct;
var work = charCodeAt(ct);
if(work == 20) {
・・・

のように数字で判定ができます。

それで、JavaScriptでなくJavaでこのようなことを
したいと思い調べたのですが
文字コードを取得する関数が見つかりません。

それで、以下のことをお聞きします。

1.Javaで文字コードを取得する方法はご存知でしょうか?
2.JavaScriptを使わず文字コードでの判定はできるでしょうか?

以上、ご存知でしたら教えてください。
よろしくお願いします。

H2
ぬし
会議室デビュー日: 2001/09/06
投稿数: 586
お住まい・勤務地: 港
投稿日時: 2002-10-21 10:14
一旦byte型配列に変換してそれの文字コードを調べるという手があります。

コード:
byte[] bytes = noencode.getBytes("8859_1");
if(bytes[0]==-126) {
  ...
}


(ただし、noencodeがすでに正しくUnicodeに変換されている場合この方法は正しく動きません)

最近ではわざわざ文字コードを見なくても、
コード:
String encoded = new String(noencode.getBytes("8859_1"),"JISAutoDetect");


とすれば、日本語の文字列をただしくUnicodeに変換してくれます。
詳しくは @IT記事の「日本語を扱うときの留意点(パラメータ取得時)にはどんなものがありますか?」を見てください。

あと、JavaScriptのcharAtcode関数はブラウザによって違う動きをしませんか?たとえばNestscapeだと文字の1バイト目返すけれど、IEだとUnicodeを返しません?エンコードの判定には使えないような・・・。
たららん!
会議室デビュー日: 2001/11/25
投稿数: 10
投稿日時: 2002-10-22 01:26
ご返答ありがとうございました。

ちょっと説明不足でした。

文字コード自体を調べたいのではなくて、
実は英数字以外をエラーとしたいのですが、
JavaScriptでエラーチェックをしていた時に、
文字コードの大小でチェックをしていましたので(以下)
if (chart.charCodeAt(0)>=33 && chart.charCodeAt(0)<=126)
    ・・・
これと同じことをJavaでできないかなぁと思いまして・・・


byte型に変換が必要ですか。
且つ、Unicodeに変換されていてはダメってことですね。
もう少し簡単にできるかと思っていたのですが。

H2さんありがとうございました。
参考にさせていだきます。
H2
ぬし
会議室デビュー日: 2001/09/06
投稿数: 586
お住まい・勤務地: 港
投稿日時: 2002-10-22 07:17
なるほど、それでしたらこれで出来ますよ。charを取り出して、それをそのまま使えます。もともとchar自体が文字コードですので。
コード:
char c = string.charAt(0);  //charを取り出す
if(c>=0x20 && c<=0x7E) {    //Unicodeのascii33番から126番まで(16進)
  ...
}



Unicodeはあまり詳しくないのでちょっと分からないのですが、java.lang.Char#getType(char ch)は使えないのかなぁ?
DaikiRyuto
大ベテラン
会議室デビュー日: 2002/07/23
投稿数: 200
投稿日時: 2002-10-22 17:56
引用:

Unicodeはあまり詳しくないのでちょっと分からないのですが、java.lang.Char#getType(char ch)は使えないのかなぁ?



java.lang.Character.getType(char ch) は
'1'とかだけでなく、'1'も
Character.DECIMAL_DIGIT_NUMBER
として返してしまうみたいですね。

java.lang.Character.isDigit(char ch) も
両方trueですね。

国際化されてる…。
H2
ぬし
会議室デビュー日: 2001/09/06
投稿数: 586
お住まい・勤務地: 港
投稿日時: 2002-10-22 18:41
ほう それはびっくり。

では'一'は?と思って試してみました。残念、さすがに'一'はCharacter.OTHER_LETTERでした。これでCharacter.DECIMAL_DIGIT_NUMBERと返してくれたらとてもビックリするのですが・・・。でも、漢字を数字と認定するようになるのはよくないですよね。
tasuku
常連さん
会議室デビュー日: 2001/08/11
投稿数: 28
投稿日時: 2002-10-22 19:11
引用:

java.lang.Character.getType(char ch) は
'1'とかだけでなく、'1'も
Character.DECIMAL_DIGIT_NUMBER
として返してしまうみたいですね。

java.lang.Character.isDigit(char ch) も
両方trueですね。

国際化されてる…。




そうなんですよね。 でもこれが原因でDBに出力するときに
結構困ったりします。(SQL文を直に作ってたりすると...。)

しょむ
ぬし
会議室デビュー日: 2001/09/06
投稿数: 430
投稿日時: 2002-10-22 23:39
Integer.parseInt() も "1000" とか解釈しまっせ。
なので、「数値だ」とわかってる場合なら、(new Integer(もげ)).toString() して
NumberFormatException を捕まえるなんていう荒技も(わ

SQL を直に、というのはあまりおすすめできなさそう。
PreparedStatement で setInt するのが安全でしょう。
# JDBC driver が腐ってなければ。

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