web-dev-qa-db-ja.com

HttpServletResponseのエンコーディングを変更する

私はXMLを返すAPIを持っていますが、実際にはデフォルトのエンコーディング(UTF-8だと思います)を使用してそれを返しますが、要件が変更され、すべてをUTF-16LEで返す必要があります。

私の質問は、これを行う簡単な方法はありますか?呼び出しが完了する直前に応答にアクセスできるので、次のようなことができるかどうか疑問に思っていました

//This method does not exist
response.setCharacterEncoding("UTF-16LE");

どうもありがとう!

PDATE:記載されている方法は使用する方法です。サーブレットAPIが含まれていない古いバージョン(2.3)を使用していました。バージョンを変更するとすべて修正されました。

18
Pablo Fernandez

ええと、メソッドは存在します存在します ここ

クライアントに送信される応答の文字エンコード(MIME文字セット)を、たとえばUTF-8に設定します。文字エンコーディングがsetContentType(Java.lang.String)またはsetLocale(Java.util.Locale)によってすでに設定されている場合、このメソッドはそれをオーバーライドします。 text/htmlの文字列でsetContentType(Java.lang.String)を呼び出し、UTF-8の文字列でこのメソッドを呼び出すことは、text/htmlの文字列でsetContentTypeを呼び出すことと同じです。 charset = UTF-8。

20
skaffman

他の人が述べたように、次のいずれかを使用します。

response.setCharacterEncoding("UTF-16LE");

または:

response.setHeader("Content-Type", "text/xml; charset=UTF-16LE");

...しかし、必ずこれを実行してくださいbefore calling response.getWriter(); ...!

14
Tim Cooper

最初

response.setHeader("Content-Type", "text/xml; charset=UTF-16LE");

次に、そのエンコーディングを実際に発行していることを確認してください!

9

次のことをしてください:

byte[] k =xml.getBytes("UTF-16"); // xml is the string with unicode content.  getBytes("UTF-16") encodes given String into a sequence of bytes and returns an array of bytes. you can use xml.getBytes(UTF8_CHARSET); for utf-8 encoding

response.setContentType("text/xml");
response.setContentLength(k.length);
response.getOutputStream().write(k);
response.getOutputStream().flush();
response.getOutputStream().close();
0