入力文字のバイト数チェック



0   名前: とむとむ : 2007/07/24(火) 23:02  ID:rZzu4rlQ sub-9g
はじめまして。javascriptで入力文字のバイト数をチェックすることに関してなのですが
色々サイトを調べて下記のようなスクリプトを見つけました。
charCodeAtメソッドはどんなOSのブラウザからでもUnicode(UTF-16)を返すと思っています。

それでUnicodeを調べて以下のコードを見ていくと
(c >= 0x0 && c < 0x81)これは→(c >= 0x20 && c < 0x7F)が正しくて
(c == 0xf8f0)は不要
(c >= 0xff61 && c < 0xffa0)は正しい
(c >= 0xf8f1 && c < 0xf8f4)は不要
と思っています。
charCodeAtメソッドはどんなOSのブラウザからでもUnicode(UTF-16)を返すという認識は正しいでしょうか?
どなたか教えてください。

function myLen(s) {
var r = 0;
for (var i = 0; i < s.length; i++) {
var c = s.charCodeAt(i);
// Shift_JIS: 0x0 〜 0x80, 0xa0 , 0xa1 〜 0xdf , 0xfd 〜 0xff
// Unicode : 0x0 〜 0x80, 0xf8f0, 0xff61 〜 0xff9f, 0xf8f1 〜 0xf8f3
if ( (c >= 0x0 && c < 0x81) || (c == 0xf8f0) || (c >= 0xff61 && c < 0xffa0) || (c >= 0xf8f1 && c < 0xf8f4)) {
r += 1;
} else {
r += 2;
}
}
return r;
}


ユニコードのサイト
http://nowsmartsoft.or.tv/nws/Japanese/unciode.htm

javascriptのサイト
http://www.geocities.co.jp/SiliconValley/4334/unibon/javascript/jslen.html

1   名前: 匿名 : 2007/07/24(火) 23:02  ID:jSC9zi.K sub-y9
一部の古いブラウザでは0〜255の範囲の値しか返さないようです。
http://developer.mozilla.org/ja/docs/Core_JavaScript_1.5_Reference:Global_Objects:String:charCodeAt

2   名前: 匿名 : 2007/07/24(火) 23:02  ID:/I7AxP9P sub-Cz
>>0
> charCodeAtメソッドはどんなOSのブラウザからでもUnicode(UTF-16)を返す

ECMA-262 にそのようなことは書かれてなかった。

ただし、§6 によれば『ECMAScript ソーステキストは Unicode 文字符号化バージョン 2.1 以降の文字のシーケンスとして表わされ、UTF-16 変形フォーマットを使用する』とある。現在の実装はこれに従い内部的に UTF-16 を使用するが、以前の古い実装は、ソーステキストの文字コードをそのまま使用するかもしれない、ということだと思う。

3   名前: とむとむ : 2007/07/24(火) 23:02  ID:0HDcySJZ sub-gm
返信ありがとうございます。

>1さん
ということは、(c >= 0x20 && c < 0x7F)は→(c >= 0 && c =< 255)ですね。

>2さん
ECMAという団体の事は全く知りませんでした。charCodeAtメソッドはECMA-262で標準化されているのですね。ありがとうございます。

一覧へ戻る