7

SHIFT_JIS 文字セットを使用した ASP Classic ページがあります。ページの head セクションの下にあるメタ タグは次のようになります。

<meta http-equiv="Content-Type" content="text/html; charset=shift_jis">

私のページには、200 文字までしか入力できないテキスト ボックス (txtName) があります。[送信] ボタンの onclick() イベントで呼び出される、文字の長さを検証する Javascript 関数があります。

if(document.frmPage.txtName.value.length > 200) {
  alert("You have exceeded the maximum length of 200.");
  return false;
}

問題は、Javascript が SHIFT_JIS でエンコードされた日本語文字の正しい長さを取得していないことです。たとえば、文字「测」の SHIFT_JIS の長さは 8 文字ですが、おそらく Javascript がデフォルトで使用する Unicode エンコーディングが原因で、Javascript はそれを 1 文字としてしか認識しません。ケなどの一部の文字は、SHIFT_JIS では 2 文字または 3 文字です。

Javascript によって提供される長さのみに依存する場合、長い日本語の文字はページ検証に合格し、データベースに保存しようとしますが、DB 列の最大長が 200 であるため失敗します。

私が使用しているブラウザは Internet Explorer です。Javascriptを使用して日本語文字のSHIFT_JISの長さを取得する方法はありますか? Javascript を使用して Unicode から SHIFT_JIS に変換することは可能ですか? どのように?

助けてくれてありがとう!

4

2 に答える 2

10
于 2012-07-13T09:10:23.083 に答える
0

文字とバイトの間で混乱しています。どう見ても测は一文字。UTF-16 (Javascript が使用するもの) では、2 バイトです。Shift_JISでは8バイトらしい。しかし、どちらの場合も、それは 1 つの文字です。あなたがやろうとしているのは、テキストの長さを 200 BYTESに制限することです。Javascript は UTF-16 (実際には UCS-2) を使用しているため、文字列の長さに 2 を掛けることでバイト長を取得できますが、Shift_JIS では役に立ちません。繰り返しになりますが、Javascript を使用している場合は、とにかく Unicode への切り替えを検討する必要があります...

于 2012-07-13T09:09:27.387 に答える