【发布时间】:2018-07-07 00:14:15
【问题描述】:
我正在学习 Java,在编写我的第一个 Web 应用程序时,我遇到了一些关于波兰语字母的问题(如 ą、ć、ł、ś 等)。问题是,当我在 GET 中将对象绑定到表单时,它在浏览器中显示正常,所有波兰字母都很好(数据库配置正确),但是在我的控制器中点击页面上的“发送”按钮后,在 POST 中,我得到缺少波兰语字母的乱码文本。当我在控制器中将视图(JSP 文件)中的编码设置为 utf-8 而不是“±”时,我得到“Ä”(两个字节)并且编码设置为 iso8895-2 我得到“±”(1 个字节)。使用 servlets 解决方案是添加
request.setCharacterEncoding("8859_2");
作为 POST 的第一行,但 Hibernate 不使用HttpServletRequest,所以即使我添加它,我仍然会得到垃圾。 STS(我的 IDE)设置为 UTF-8。
他有什么解决办法吗?
按要求浏览器日志:
Request URL:http://localhost:8080/Project/register
Request Method:POST
Status Code:200
Remote Address:[::1]:8080
Referrer Policy:no-referrer-when-downgrade
Response Headers
view source
Content-Language:pl-PL
Content-Length:3338
Content-Type:text/html;charset=UTF-8
Date:Mon, 29 Jan 2018 11:30:04 GMT
Request Headers
view source
Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
Accept-Encoding:gzip, deflate, br
Accept-Language:en-US,en;q=0.8
Cache-Control:max-age=0
Connection:keep-alive
Content-Length:58
Content-Type:application/x-www-form-urlencoded
Cookie:JSESSIONID=88145A5FCBBD13FDBE3C288110B38187
DNT:1
Host:localhost:8080
Origin:http://localhost:8080
Referer:http://localhost:8080/Project/register
Upgrade-Insecure-Requests:1
User-Agent:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.102 Safari/537.36 Vivaldi/1.94.971.8
Form Data
view source
view URL encoded
username:ąąą
email:
age:0
phone:0
password:
点击查看 URL 编码后:
%C4%85%C4%85%C4%85
【问题讨论】:
-
任何浏览器调试以显示表单实际提交为哪种编码?您是否按照this answer 中的建议在控制器 POST 映射中指定了 UTF-8 编码(例如:
produces = "text/plain;charset=UTF-8")? -
嗨。我在第一篇文章中添加了浏览器登录。不幸的是,将控制器后映射更改为 @PostMapping(value = "/register",produces = "text/plain;charset=UTF-8") 并没有改变任何东西。我的想法不多了...
标签: java spring hibernate jsp character-encoding