Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Spring Hibernate-没有来自HTML表单的波兰语字母_Java_Spring_Hibernate_Jsp_Character Encoding - Fatal编程技术网

Java Spring Hibernate-没有来自HTML表单的波兰语字母

Java Spring Hibernate-没有来自HTML表单的波兰语字母,java,spring,hibernate,jsp,character-encoding,Java,Spring,Hibernate,Jsp,Character Encoding,我正在学习Java,在编写我的第一个web应用程序时,我遇到了一些波兰语字母的问题(如ą、ć、ł、ś等)。问题是,当我在GET中将对象绑定到表单时,它在浏览器中显示ok,所有波兰语字母都很好(数据库配置正确),但在我的控制器的POST中点击页面上的“send”按钮后,我得到了缺少波兰语字母的乱码文本。当我在控制器中将视图(jsp文件)中的编码设置为utf-8而不是“ą”时,我得到了“Ä”(两个字节),而将编码设置为iso8895-2时,我得到了“±”(1个字节)。对于servlet,解决方案是添

我正在学习Java,在编写我的第一个web应用程序时,我遇到了一些波兰语字母的问题(如ą、ć、ł、ś等)。问题是,当我在GET中将对象绑定到表单时,它在浏览器中显示ok,所有波兰语字母都很好(数据库配置正确),但在我的控制器的POST中点击页面上的“send”按钮后,我得到了缺少波兰语字母的乱码文本。当我在控制器中将视图(jsp文件)中的编码设置为utf-8而不是“ą”时,我得到了“Ä”(两个字节),而将编码设置为iso8895-2时,我得到了“±”(1个字节)。对于servlet,解决方案是添加

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

您应该为页面设置一个内容类型标题,然后它用于发送POST请求

见:

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

始终明确地标记Web文档是非常重要的。超文本传输协议 1.1表示默认字符集为ISO-8859-1。但是其他编码中有太多未标记的文档,因此浏览器使用 没有显式字符集时读取器的首选编码 参数

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

Content-Type: text/html; charset=utf-8
理论上,任何已向IANA注册的字符编码 可以使用,但没有浏览器可以理解所有这些。这个 字符编码使用得越广泛,越有可能 浏览器会理解的。Unicode编码(如UTF-8)是一种很好的方法 选择的原因有很多


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

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


UTF-8是ASCII字符集以外字符的通用字符编码。默认情况下,服务器配置为使用UTF-8。

通过设置过滤器并稍微重新配置Tomcat解决了此问题,如下所述:

任何浏览器调试,以显示表单实际以何种编码提交?您是否按照中的建议在控制器POST映射中指定了UTF-8编码(例如:
products=“text/plain;charset=UTF-8”
)。我在第一篇文章中添加了浏览器日志。不幸的是,将控制器postmapping更改为@postmapping(value=“/register”,products=“text/plain;charset=UTF-8”)并没有改变任何内容。我没什么主意了…嗨。我在第一篇文章中添加了浏览器日志。html文件中的编码设置在三个位置:第一行:之后,如果我将其更改为iso-8859-2,那么在控制器中,它将映射到UTF-8,并且仍然得到错误的结果。