【问题标题】:Spring Boot encoding / special charactersSpring Boot 编码/特殊字符
【发布时间】:2020-11-16 10:36:01
【问题描述】:

我对 Spring boot REST API 特殊 cs_CS 字符的编码有疑问。

例子:

@ResponseBody
@RequestMapping("/api/test")
public String test(){
    String specialCH = "ěščřžýáíéúů";
    System.out.println(specialCH);

    return specialCH;
}


2020-11-16 11:22:04.557  INFO 7400 --- [           main] cz.fry.chmi.ChmiApplication              : Started ChmiApplication in 5.187 seconds (JVM running for 5.703)
2020-11-16 11:22:05.167  INFO 7400 --- [nio-8080-exec-1] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring DispatcherServlet 'dispatcherServlet'
2020-11-16 11:22:05.168  INFO 7400 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet        : Initializing Servlet 'dispatcherServlet'
2020-11-16 11:22:05.175  INFO 7400 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet        : Completed initialization in 7 ms
ěščřžýáíéúů

浏览器中的结果:

result

application.properties:

server.servlet.encoding.charset=UTF-8
server.servlet.encoding.force=true

操作系统 Windows 10 1909。

PS: 如果我创建文件 test.html ->

+ěššččřřžýáíéáý

浏览器中的结果:

result

【问题讨论】:

  • 您的String specialCH = "ěščřžýáíéúů"; 似乎被编码为cp852 但被解释为cp850cp437?
  • 我不知道,但如果我设置server.servlet.encoding.charset=CP852 相同的结果。
  • 不,不,不!我们正处于第三个千年,所以到处都切换到 UTF-8……
  • 是的,但是每个编码 cp852 ISO8859-1/2 UTF-8 返回 ???? 而不是 ěščř
  • 我的意思是另一个mojibake 机制。这是 Python 中的一个示例:'ěščřžýáíé'.encode('cp850','replace').decode('cp850') 产生 ?????ýáíé。抱歉,我不会说java...

标签: java spring spring-boot rest character-encoding


【解决方案1】:

我找到了解决办法

只需要在 Spring MVC 返回字符串中强制 UTF-8 编码:

@RequestMapping 中,使用:

produces = MediaType.APPLICATION_JSON_VALUE + "; charset=utf-8"

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-12-28
    • 2016-10-19
    • 1970-01-01
    • 2013-06-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多