質問

2009-09-02 12 views
0

は(私はちょうどそれの一部をリストし、気にしないでください)さんは、私がJSPページを持っているとしましょう:「質問

<%@ page language="java" contentType="text/html;charset=UTF-8"%> 
<form> 
     <input type=input> 
     </input> 
    中華<!--character with BIG5 encoding> 
</form> 

とサーバ側では、私は(これrequest.setCharacterEncodingを使用UTF-8 ")。 私の問題は: IMEを使用して入力ボックスに中国語文字を入力すると、このフォームを送信すると、入力ボックスの文字はどのエンコードになりますか?どうして? jspページの "中華"を入力ボックスにコピーしてフォームを送信しようとすると、サーバー側で、入力ボックスの文字列が "UTF-8"でないことがわかりました(要求の設定と同じです) .setCharacterEncoding)ではなく "BIG5"です。 これはjava/jspにありますが、リクエストは実際には "UTF-8"の設定ではないようです。 なぜですか?誰かが私にこれについて何か教えてもらえますか?

しかし、入力ボックスに入力してフォームを投稿する文字列は、サーバー側では常にUTF-8になり、決して破損しないようです。

なぜですか? asp.netはこれを自動的に処理しますか?それは自動的に入力ボックスの文字エンコーディングをUTF-8に変更しますか?

フォームのポストアクションは、フォーム内のすべての文字を何らかの16進数として扱い、自動的には処理しないと思うので、ヘッダにこれらのHEXを囲み、サーバに送信するだけです。 しかし、もしこのアイデアが真実なら、文字がasp.netで決して壊れないのはなぜですか?

ありがとうございます!

答えて

0

障害箇所を特定します。

&#x4E2D;&#x83EF;

あなたが選んだ文字は、(Unicodeコードポイントとして)U + 4E2DとU + 83EF(CJK統一イデオグラフィックスブロック内)です。サーバー上で受信した文字列を受け取り、Integer.toHexString(mystring.charAt(i))を使用して構成文字の値を出力すると、これらの値が表示されます。そうでない場合、クライアントからのデータの解釈に問題があります。

UTF-8のページエンコードを指定しています。だから

U+4E2D 0xE4 0xB8 0xAD 
U+83EF 0xE8 0x8F 0xAF 

ファイルなどのブラウザでページを保存し、バイナリエディタで開き - あなたが表示されるはずです。UTF-8としてエンコードされ、上記の文字がレンダリングされたHTMLに次のバイト列の値を取る必要があります上記のようにエンコードされた文字。

サーブレットにフォームを送信し、生のバイトinputをファイルにダンプし、16進エディタで検査することで、クライアントから送信されている情報を収集することもできます。また、HTTPヘッダーとサーバーとクライアントが受け入れて送信する文字エンコーディング(Firebugを参照)も調べる価値があります。