63 votes

Problème d'encodage UTF-8 dans Spring MVC

J'ai un bean Spring MVC et j'aimerais renvoyer le caractère turc en définissant l'encodage UTF-8. mais bien que ma chaîne soit « çÇöÖüÜ », elle renvoie « ??????çÇöÖüÜ ». et aussi quand je regarde la page de réponse, qui est la page Internet Explorer, l'encodage est ISO d'Europe occidentale, pas UTF-8.

Voici le code :

     @RequestMapping(method=RequestMethod.GET,value="/GetMyList")
public @ResponseBody String getMyList(HttpServletRequest request, HttpServletResponse response) throws CryptoException{
    String contentType= "text/html;charset=UTF-8";
    response.setContentType(contentType);
    try {
        request.setCharacterEncoding("utf-8");
    } catch (UnsupportedEncodingException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    response.setCharacterEncoding("utf-8");     
    String str="çÇöÖüÜ";
    return str;
}   

79voto

Charlie Wu Points 2308

Je l'ai compris, vous pouvez ajouter au mappage de la demande produit = "text/plain;charset=UTF-8"

 @RequestMapping(value = "/rest/create/document", produces = "text/plain;charset=UTF-8")
@ResponseBody
public void create(Document document, HttpServletRespone respone) throws UnsupportedEncodingException {

    Document newDocument = DocumentService.create(Document);

    return jsonSerializer.serialize(newDocument);
}

voir cet article de blog pour plus de détails sur la solution

27voto

aki Points 330

dans votre contexte XML de servlet de répartiteur, vous devez ajouter une propriété "<property name="contentType" value="text/html;charset=UTF-8" />" sur votre bean viewResolver. nous utilisons freemarker pour les vues.

ça ressemble à quelque chose comme ça :

 <bean id="viewResolver" class="org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver">
       ...
       <property name="contentType" value="text/html;charset=UTF-8" />
       ...
</bean>

7voto

rwoo Points 515

Convertissez vous-même la chaîne JSON en UTF-8.

 @RequestMapping(value = "/example.json", method = RequestMethod.GET)
@ResponseBody
public byte[] example() throws Exception {

    return "{ 'text': 'äöüß' } ".getBytes("UTF-8");
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X