【发布时间】: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
ěščřžýáíéúů
浏览器中的结果:
application.properties:
server.servlet.encoding.charset=UTF-8
server.servlet.encoding.force=true
操作系统 Windows 10 1909。
PS: 如果我创建文件 test.html ->
+ěššččřřžýáíéáý
浏览器中的结果:
【问题讨论】:
-
您的
String specialCH = "ěščřžýáíéúů";似乎被编码为cp852但被解释为cp850或cp437? -
我不知道,但如果我设置
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