web-dev-qa-db-fra.com

Changer le codage de HttpServletResponse

J'ai une API qui renvoie XML, elle le fait en utilisant le codage par défaut (je crois que c'est UTF-8), mais maintenant les exigences ont changé et nous devons tout renvoyer dans UTF-16LE.

Ma question est la suivante: existe-t-il un moyen facile de procéder? J'ai accès à la réponse juste avant la fin des appels, alors je me demandais si je pouvais faire quelque chose comme:

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

Merci beaucoup!

UPDATE: La méthode mentionnée est celle à utiliser. J'utilisais une ancienne version (2.3) de l'API servlet qui ne l'incluait pas. Changer la version a tout corrigé.

17
Pablo Fernandez

Euh, la méthode fait existe, ici

Définit le codage des caractères (jeu de caractères MIME ) De la réponse envoyée au Client, par exemple, au format UTF-8. Si L'encodage de caractères a déjà été défini par SetContentType (Java.lang.String) ou SetLocale (Java.util.Locale), ceci méthode la remplace. Appeler SetContentType (Java.lang.String) avec La chaîne de text/html et appeler Cette méthode avec une chaîne de caractères de UTF-8 Est équivalent à appel de setContentType avec la chaîne de text/html; jeu de caractères = UTF-8.

19
skaffman

Comme d’autres l’ont dit, utilisez soit:

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

ou:

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

... mais assurez-vous de faire ceci avant appelez response.getWriter (); ...!

12
Tim Cooper

Premier

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

Ensuite, assurez-vous que vous émettez réellement cet encodage!

8
Jonathan Feinberg

faites juste ce qui suit:

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