2012-01-12 9 views
1

私は、Json {obj:XML}の要求に応答するサーブレットを持っています(つまり、内部にxmlオブジェクトを含むJsonを意味します)。XMLを含むJavaサーブレットjsonオブジェクト、符号化の問題

XMLはUTF-8でエンコードされ、=>पोलैंडのようないくつかの文字があります。

XMLはorg.w3c.dom.Documentにあり、私はJSONを解析するためにJSON.orgライブラリを使用しています。 ServletOutputStreamに印刷しようとすると、文字がうまくエンコードされません。私はそれをファイルでレスポンスを表示しようとしているのをテストしましたが、エンコーディングはUTF-8ではありません。

Parser.printTheDom(documentFromInputStream,byteArrayOutputStream); 
OutputStreamWriter oS=new OutputStreamWriter(servletOutputStream, "UTF-8"); 
oS.write((jsonCallBack+"(")); 
oS.write(byteArrayOutputStream); 
oS.write(");"); 

Iは前と次のコードを(サーブレットdeploingせず)もローカルにしようと試みた:

oS.write("पोलैंड"); 

と結果は同じです。

代わりに文書を印刷しようとすると、そのファイルは整形式のXMLです。

oS.write((jsonCallBack+"(")); 
Parser.printTheDom(documentFromInputStream,oS); 
oS.write(");"); 

ヘルプがありますか?

+0

生の出力ストリームを手動で折り返すのではなく、 'HttpServletResponse.getWriter()'によって提供された 'Writer'を使ってみましたか? – skaffman

+0

こんにちは、ご協力いただきありがとうございます。私は作家を使用しようとしたが、それはちょうどいくつかのケースで動作するように見え、他の文字はうまく形成されていません。何か別の考えがありますか? @skaffman – pokeRex110

答えて

0

通常、バイナリデータがxmlドキュメントの一部である必要がある場合、それはbase64でエンコードされます。詳細はthis questionを参照してください。私は、base64で、エキゾチックなUTF-8文字を持つことができるフィールドをエンコードし、クライアント側でbase64をデコードすることをお勧めします。

Javaのbase64エンコーディング/デコードの2つの良いオプションについては、this questionを参照してください。

+0

VMありがとう、私はそれを試してみます。とにかく、なぜこれはPHPで動作しますか? phpでは、同じコード(多かれ少なかれ)がエキゾチックな文字の16進表現を生成します。答えにもう一度感謝します。 – pokeRex110

関連する問題