弹簧 MVC 中的 UTF-8 编码问题

2022-08-31 16:21:08

我有一个Spring MVC豆,我想通过设置编码UTF-8来返回土耳其字符。但是虽然我的字符串是“şŞğğİıçÇöÖüÜ”,但它返回为“??????ççööüü“.而且当我查看响应页面时,这是Internet Explorer页面,编码是西欧iso,而不是UTF-8。

代码如下:

    @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;
}   

答案 1

我已经想通了,你可以添加到请求映射生成=“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);
}

有关解决方案的更多详细信息,请参阅此博客文章


答案 2

在你的调度程序 servlet 上下文 xml 中,你必须在你的视图上添加一个属性解析器 Bean。我们正在使用自由标记的视图。"<property name="contentType" value="text/html;charset=UTF-8" />"

它看起来像这样:

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

推荐