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é.
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.
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 (); ...!
Premier
response.setHeader("Content-Type", "text/xml; charset=UTF-16LE");
Ensuite, assurez-vous que vous émettez réellement cet encodage!
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();