私はXMLを返すAPIを持っていますが、実際にはデフォルトのエンコーディング(UTF-8だと思います)を使用してそれを返しますが、要件が変更され、すべてをUTF-16LEで返す必要があります。
私の質問は、これを行う簡単な方法はありますか?呼び出しが完了する直前に応答にアクセスできるので、次のようなことができるかどうか疑問に思っていました
//This method does not exist
response.setCharacterEncoding("UTF-16LE");
どうもありがとう!
PDATE:記載されている方法は使用する方法です。サーブレットAPIが含まれていない古いバージョン(2.3)を使用していました。バージョンを変更するとすべて修正されました。
ええと、メソッドは存在します存在します ここ
クライアントに送信される応答の文字エンコード(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。
他の人が述べたように、次のいずれかを使用します。
response.setCharacterEncoding("UTF-16LE");
または:
response.setHeader("Content-Type", "text/xml; charset=UTF-16LE");
...しかし、必ずこれを実行してくださいbefore calling response.getWriter(); ...!
最初
response.setHeader("Content-Type", "text/xml; charset=UTF-16LE");
次に、そのエンコーディングを実際に発行していることを確認してください!
次のことをしてください:
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();