日本語文字列の長さ



日本語文字列の長さ
 JavaScript1.3から日本語文字列の扱いがUnicodeに変更されました。これに伴ってNetscapeでの日本語文字列処理の変更が必要になります。特に困るのが文字数を求めた場合に異なる長さを返してくることです。
 例えば以下の文字をNetscape 4.05以前とNetscape 4.06/4.5以降で実行してみます。

alert("古籏".length)

 4.05以前では日本語1文字は2文字とカウントされるため「4」を返します。4.06/4.5以降では日本語1文字は1文字としてカウントされるため「2」を返します。Explorerの場合は日本語1文字は1文字としてカウントされます。
 日本語1文字を1文字とするか2文字とするかを調べるのにブラウザのバージョンを取得して調べるのは面倒です。このような場合は以下のようにすると、どうカウントするのかを調べることができます。

flag = ("あ".length) == 1

 flag = trueの場合は1文字として、flaseであれば2文字としてカウントされるという事になります。

 しかし、これでは根本的な解決になりません。そこで共通の関数を作成してNS,IEともに動作し、どちらも同じ値を返す関数を作成してみました。以下の関数は日本語1文字を2文字として換算します。つまりNS4.05以前と同じになります。

function getLength(moji)
{
	var i,cnt = 0;
	for(i=0; i<moji.length; i++) if (escape(moji.charAt(i)).length >= 4 ) cnt+=2; else cnt++;
	return cnt;
}