gpt4 book ai didi

java - 在 Tomcat 服务器上使用 POST 方法从 jsp 到 jsp 的错误编码

转载 作者:行者123 更新时间:2023-11-28 23:13:44 25 4
gpt4 key购买 nike

我目前正在学习 JEE,在练习中我只需要使用带有 POST 方法的基本表单将文本数据从 .jsp 文件发送到另一个文件。在这种形式中,我希望能够使用重音字符,所以我使用 <%@page pageEncoding="UTF-8" %>在我的 jsp 文件之上,它们还有 <meta charset="utf-8">标签和我的 IDE (Eclipse) 配置为使用 UTF-8 编码所有内容。

问题是在该行的末尾,当我尝试使用 EL 显示我的字符时,重音字符(以及我猜的其他字符)以 ISO-8859-1 编码。

这里真正特别的是,当使用 GET 方法发送数据时,我完全没有任何问题。当我通过 servlet 中的属性集在请求中传递字符串时,结果相同。

事实上,我已经通过将请求发送到 servlet 并调用 request.setCharacterEncoding("utf-8") 解决了这个问题。在 doPost 方法中(准确地说,在此之前调用 request.getCharacterEncoding() 会给我 null ),但我想了解这里到底发生了什么。我猜它来自服务器配置错误,但是当我检查我的服务器配置的 web.xml 文件时,我有这些行:

<filter>
<filter-name>setCharacterEncodingFilter</filter-name>
<filter-class>org.apache.catalina.filters.SetCharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
<async-supported>true</async-supported>
</filter>

我的困惑来自于没有人告诉我使用 request.setCharacterEncoding("utf-8") ,而且我必须这样做对我来说似乎不正常,所以我想问题是:我绝对必须使用它吗?为什么 ?编码不应该由服务器的配置来处理吗?

我在服务器上使用 Tomcat 9,我在 Ubuntu 下(不知道是否有帮助)。

最佳答案

答案在这里(感谢 Selaron):http://balusc.omnifaces.org/2009/05/unicode-how-to-get-characters-right.html

URL-decoding POST request parameters is a story apart. The webbrowser is namely supposed to send the charset used in the Content-Type request header. However, most webbrowsers doesn't do it. Those webbrowsers will just use the same character encoding as the page with the form was delivered with, i.e. it's the same charset as specified in Content-Type header of the HTTP response or the tag.

基本上问题出在导航器上,导航器应该传递它在 header 请求中使用的编码字符集,但没有这样做。由于没有给 Tomcat 任何字符集来解码请求,它自己决定默认使用 ISO-8859-1 样式。显然,您无法配置它!所以你只需要通过指示编码字符集是 UTF-8 来强制它。

我想编写我所关注的讲座的人有一个更好的导航器,因为他从未提到过这个问题。不管怎样,现在我感觉好多了!非常感谢!

关于java - 在 Tomcat 服务器上使用 POST 方法从 jsp 到 jsp 的错误编码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53396303/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com