代码之家  ›  专栏  ›  技术社区  ›  Witcher

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

  •  3
  • Witcher  · 技术社区  · 7 年前

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

    request.setCharacterEncoding("8859_2");
    

    作为POST中的第一行,但Hibernate不使用 HttpServletRequest ,所以即使我添加它,我仍然会收到垃圾。STS(my 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
    
    2 回复  |  直到 3 年前
        1
  •  2
  •   Roman C    7 年前

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

    看见 Setting the HTTP charset parameter :

    使用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。

        2
  •  0
  •   Witcher    7 年前

    通过设置过滤器并稍微重新配置Tomcat,问题得以解决,如下所述: https://stackoverflow.com/a/40484064/8783698