【问题标题】:Java Spring Hibernate - no polish letters from HTML formJava Spring Hibernate - 没有来自 HTML 表单的波兰字母
【发布时间】: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


【解决方案1】:

你应该为你的页面设置一个 content-type 标题,然后它用于发送 POST 请求。

Setting the HTTP charset parameter:

使用 HTTP 传输的文本类型的文档,例如 text/html、text/plain等,可以在HTTP中发送charset参数 header 指定文档的字符编码。

始终明确标记 Web 文档非常重要。 HTTP 1.1 表示默认字符集是 ISO-8859-1。但是其他编码的无标签文档太多了,所以浏览器使用 没有显式字符集时读者的首选编码 参数。

HTTP 标头中的行通常如下所示:

Content-Type: text/html; charset=utf-8

理论上,任何已在 IANA 注册的字符编码 可以使用,但是没有浏览器可以理解所有这些。这 字符编码使用得越广泛,一个字符编码的机会就越大 浏览器会理解的。像 UTF-8 这样的 Unicode 编码是很好的 出于多种原因选择。


我不确定在通过 HTTP 传输页面时,特定的内容类型代码能否解决编码问题。但是应该为请求设置正确的代码。

Header set Content-Type "text/html; charset=iso-8859-2" 

UTF-8 是 ASCII 字符集以外字符的常见字符编码。服务器默认配置为使用 UTF-8。

【讨论】:

  • 嗨。我在第一篇文章中添加了浏览器登录。 html 文件中的编码设置在三个位置:第一行: 和后面 如果我将它更改为 iso-8859-2 然后在控制器中它被映射到 UTF-8 并且我仍然得到错误的结果。
【解决方案2】:

通过设置过滤器和重新配置 Tomcat 解决了问题,此处描述:https://stackoverflow.com/a/40484064/8783698

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-05-12
    • 1970-01-01
    • 1970-01-01
    • 2019-04-02
    • 2013-12-15
    • 1970-01-01
    • 2018-07-19
    • 1970-01-01
    相关资源
    最近更新 更多