jsp - 如何将 Unicode 字符作为 JSP/Servlet request.getParameter 传递?

标签 jsp servlets unicode character-encoding mojibake

经过多次尝试和错误,我仍然无法找出问题所在。 JSP、servlet 和数据库都设置为接受 UTF-8 编码,但即使如此,每当我对任何具有两字节字符(如破折号)的内容使用 request.getParameter 时,它们都会被打乱为损坏的字符。

我已经手动提交到数据库,它能够接受这些字符,没有问题。如果我从 servlet 中的数据库中提取文本并以 jsp 页面的形式打印它,那么它不会显示任何问题。

我发现它以损坏字符的形式返回的唯一一次是当我尝试使用 request.getParameter 检索它后在其他地方显示它时。

还有其他人遇到过这个问题吗?我该如何修复它?

最佳答案

如果请求和/或响应编码根本没有正确设置,就会发生这种情况。

对于 GET 请求,您需要在 servletcontainer 级别进行配置。目前尚不清楚您使用的是哪一个,但例如 Tomcat,这将由 URIEncoding 完成<Connector> 中的属性其 /conf/server.xml 中的元素.

<Connector ... URIEncoding="UTF-8">

对于 POST 请求,您需要创建 filter它映射到涵盖所有这些 POST 请求的所需 URL 模式。例如。 *.jsp甚至/* 。在 doFilter() 中执行以下工作:

request.setCharacterEncoding("UTF-8");
chain.doFilter(request, response);

对于 HTML 响应和提交的 HTML 表单输入值的客户端编码,您需要设置 JSP 页面编码。将其添加到 JSP 顶部(考虑到显示 UTF-8 直接形式 DB 工作正常,您可能已经正确完成了该操作)。

<%@page pageEncoding="UTF-8" %>

或者为了防止在每个 JSP 上复制粘贴此内容,请在 web.xml 中配置一次。 :

<jsp-config>
    <jsp-property-group>
        <url-pattern>*.jsp</url-pattern>
        <page-encoding>UTF-8</page-encoding>
    </jsp-property-group>
</jsp-config>

对于源代码文件和stdout(IDE控制台),您需要设置IDE工作区编码。目前还不清楚您使用的是哪一个,但对于 Eclipse 来说,可以通过将窗口 > 首选项 > 常规 > 工作区 > 文本文件编码 设置为 UTF-8 来完成。

enter image description here

请注意 HTML <meta http-equiv>当页面通过 HTTP 提供时,标记将被忽略。仅当通过 file:// 从本地磁盘文件系统打开页面时才考虑它。还指定 <form accept-charset>是不必要的,因为它已经默认使用在使用表单提供 HTML 页面期间使用的响应编码。另请参阅W3 HTML specification .

另请参阅:

关于jsp - 如何将 Unicode 字符作为 JSP/Servlet request.getParameter 传递?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45686949/

相关文章:

java - 如何将信息从一个jsp页面传递到另一个jsp页面

swift - 将按钮标题设置为 unicode 字符

javascript - 企图利用?

java - 你能告诉我,我的请求映射有什么问题吗?

java - 从 jsp 页面打印到打印机。使用按钮从数据库检索数据并打印

java - 跨多个映射的 Servlet 实例

java - 主机IP地址0 :0:0:0:0:0:0:1 on Servlet

java - ServletContextListener 问题 | HTTP 状态 404 -

javascript - 如何通过 JavaScript 解码 unicode HTML?

java - Struts 2 - HTTP 状态 404 - 没有为操作定义结果