2011-04-05 11 views
0

私はdojoとstruts 1.3.8を使用し、dojo.xhrGetを介してé、°、ù、€のようないくつかの特殊文字をsave stilluts saveBillに渡したいと思います。私はそれが私にDOJO xhrGet json with special character

è la prova n°10 

を与えたアクションでJSONを印刷するとき、問題がどこにあるか私にはわからない。しかし、私はまた、使用...すべてのJSPでUTF-8に、すべてのコンテンツタイプを設定しますutr-8でエンコーディングするためのstrutsフィルタ...何も...どこが間違っていますか? これはJavaScriptコード

var billJson = {"row":"0","descr":"è la prova n°10"}; 
dojo.xhrGet({ 
    url: "saveBill.do", 
    headers: {'bill': billJson, 'Content-Type': 'application/json; charset=UTF-8'}, 
    handleAs: "text", 
    load: function(response, ioArgs) { 
      showMessage(response); 
    }, 
    error: function(message, ioArgs) { 
      showMessage(message); 
    } 
}); 

であり、これは、応答ヘッダ(Firebugのコピーから&ペースト)

Host localhost:9080 
User-Agent Mozilla/5.0 (Windows NT 5.1; rv:2.0) Gecko/20100101 Firefox/4.0 
Accept text/html,application/xhtml+xml,application/xml;q=0.9,**;q=0.8 
Accept-Language it-it,it;q=0.8,en-us;q=0.5,en;q=0.3 
Accept-Encoding gzip, deflate 
Accept-Charset UTF-8,* 
Keep-Alive 115 
Connection keep-alive 
bill {"row":"0","descr":"è la prova n°10"} 
Content-Type application/json; charset=UTF-8 
X-Requested-With XMLHttpRequest 
Referer http://localhost:9080/CA3_S_001/login.do 
Cookie invoiceTreeSaveStateCookie=undefined%2C000001%2C000014; JSESSIONID=0000QeyArD4K7CDr_oyNkrpw9Zk:-1 

おかげです!

+0

"bill"というヘッダーフィールドにデータを渡していますか? JSONを渡しているときに、なぜhandleAs = textを使用していますか? "text"はエスケープしないので、ASCII以外の文字をエンコードする必要があります。 –

+0

あなたのサーバーはコンテンツ上でutf-8を宣言していますが、サーバーのコンテンツがutf-8で実際にエンコードされていますか? – peller

答えて

0

あなたはそれらの文字をエスケープUNICODEする必要がありますので、代わりにEを、あなたはu00E8

はここにリソースです。\\持っていると思います:HTTPヘッダにJSONを送信http://www.fileformat.info/info/unicode/category/Ll/list.htm

+0

する必要はありませんが、回避策です – peller

0

はかなり非標準であり、かつ私はそれをお勧めしません。ヘッダーにJSONを送信しない理由の1つは、わかっているように、HTTPヘッダーは単なるバイトです。それらを文字列に変換するための固有のコードページはありません。代わりにPOST本体にJSONデータを送ります。私はあなたには、はるかに良い運があると思います。

ただし、非ASCII JSONデータをヘッダーに絶対送信する必要がある場合は、ServletRequest.setCharacterEncoding( "UTF-8")を呼び出すことができます。私はそれがURLパラメータとPOST本体の解析にのみ影響すると思いますが、試してみる価値があります。また、Robot Woodsが示唆しているように、\ uXXXXはJSON内のすべての非ASCII文字をエンコードすることができます(XXXXは、文字のUTF-16エンコーディングの16進表現です)。

しかし、真剣に、それをPOST本体に入れてください。より強く、より良い解決策です。