2012-03-07 9 views
1

私はサーブレット(TomCatでホストされています)にUTF-8文字列をポストしようとしていますが、サーバー側で読み取られる文字列はUTF- Firebug経由で、ajaxヘッダーのcontent-typeにutf-8エンコーディングセットがあることを確認しました。私は "MÉXICO"をサーバーにポストしていますが、 "MÖXICO"を受け取りました。jqueryを使用してサーブレットにUTF-8文字列を投稿します。

$.ajaxSetup({ 
    scriptCharset: "utf-8" , 
    contentType: "application/x-www-form-urlencoded; charset=UTF-8" 
}); 


$.ajax({ 
    url: "SetData", 
    type: 'POST', 
    data: 'MÉXICO', 
    success: function(){ 
     console.log('Data set'); 
    } 
}); 

ここでは、Javaコードは、私が( 'メキシコ)encodeURIComponentでのJSでのポスティングデータを変更しますが、サーバーがまだ「MAを読み込み、サーブレット

request.setCharacterEncoding("UTF-8"); 
BufferedReader reader = new BufferedReader(new InputStreamReader(request, "UTF-8"));   
char[] chr = new char[5]; 
reader.read(chr); 
builder.append(chr); 

UPDATE 1

にあります‰XICO "と表示されます。

しかし、私はencodeURIComponent( 'MÉXICO')の文字列の値、つまり 'M%C3%89XICO'を取得しています。 私はzappedです!なぜこれがうまくいくのでしょうか?

$.ajax({ 
    url: "SetData", 
    type: 'POST', 
    //data: 'MÉXICO', ** does not work 
    //data: encodeURIComponent('MÉXICO'), ** does not work 
    data: 'M%C3%89XICO', //works !!!! 
    success: function(){ 
     console.log('Data set'); 
    } 
}) 

; encodeURIComponentでと

+0

最後に、文字列がハードコードされていないと、なぜウォーキングしていないのかがわかりました。私はドキュメントのcharecter encodinを設定していなかった!ありがとうございました! – webber

答えて

1

私はあなたが何をしているか、あなたが送信するリクエストパラメータの種類を理解していません。

... 
data:{key:'MÉXICO'}, 
... 

OR

... 
data:{key:encodeURIComponent('MÉXICO')}, 
... 

とサーブレットで

... 
request.getParameter('key') 
... 

OR

stringURLDecoder.decode(
          request.getParameter('key').toString(), 
          'UTF-8' 
         ); 

または私は何かを理解していない(場合:はずのコードでは、そのようなものになりますこれは私sの場合申し訳ありません:/)

+0

+1に役立ちます指定した形式でデータを送信する必要があることに注意することが重要です。この場合、彼はそれが 'application/x-www-form-urlencoded'となると言った。 –

+0

私はあなたの提案を試してみたところ、うまくいかなかった。私はまだサーバー上でMÖXICOを取得します。とにかくありがとう! – webber

+0

DMoses:contentTypeをどのように変更する必要がありますか? – webber

1

てみエンコードのデータ値()

data: encodeURIComponent('MÉXICO') 

出典:JQuery AJAX is not sending UTF-8 to my server, only in IE

+0

彼はPOSTを使用しています。だから私は彼に関係するとは思わない。 –

+0

幸運!私は、サーブレットコードを変更してstringURLDecoder.decode(builder.toString()、 "UTF-8")をデコードします。 – webber

+0

これは、OPが尋ねたことを解決しない場合でも、http://stackoverflow.com/questions/607176/java-equivalent-to-javascripts-encodeuricomponent-that-produces-identical-outpu – arunes