【问题标题】:jsp and utf-8 characters [duplicate]jsp和utf-8字符[重复]
【发布时间】:2015-05-17 14:13:39
【问题描述】:

从jsp,在文本框中,我输入“göteborg”。 但是在我的 servlet 中,当我执行“request.getParameter”时,我得到了“göteborg”。

这种行为正确吗?

我在jsp页面中有以下设置。

<%@ page contentType="text/html; charset=UTF-8" language="java"%>
<meta charset="UTF-8"/>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

在调用 request.getParameter 之前,我还在 servlet 中设置了以下行:

request.setCharacterEncoding("UTF-8");

缺少什么?

【问题讨论】:

  • 您能否检查原始请求的请求/响应标头以及相关请求的标头。
  • 重要的是浏览器在收到表单时看到的字符集。
  • 解释是从浏览器到你的服务器的表单post请求是独立的。 HTTP 默认编码是 ISO-8859-1,因此缺少request.setEncoding("UTF-8"); 幸运的是,有解决方案可以在一个地方对传入的请求进行这种编码。
  • 谢谢大家,我通过在 server.xml 中添加 URIEncoding="UTF-8" 到 8080 连接器解决了这个问题。
  • 你可能想自己回答这个问题 - 提供关闭,以防其他人遇到同样的问题。

标签: java jsp servlets utf-8


【解决方案1】:

如果您使用 glassfish,可以尝试将此行添加到您的 web.xml:

<parameter-encoding default-charset="UTF-8"/>

另外,Tomcat's character encoding FAQ 也有一些很好的建议(尽管它适用于任何 servlet 容器):

  • 使用默认编码设置为 UTF-8 的字符编码过滤器 更改所有 JSP 以在其 contentType 中包含字符集名称。

  • 在您的字符编码过滤器或 jsp 页面有机会将编码设置为 UTF-8 之前,禁用任何可能读取请求参数的阀门或过滤器。

【讨论】:

  • 谢谢,实际上,参数编码没有帮助(我使用的是 tomcat 6)。但是我从您共享的常见问题解答链接中得到了指针。我必须在 server.xml 中为 8080 连接器设置 URIEncoding="UTF-8" ,这解决了我的问题。
  • 是的,在使用 Tomcat 时,FAQ 对我也非常有用 :-) 我提到过 parameter-encoding 然后我意识到它只是针对 Glassfish,其他实现(例如 Tomcat)不同(无论如何作为参考实现和所有,它仍然很高兴知道)。无论如何,它们都具有您已经完成的工作以及 Tomcat 常见问题解答中的其他两个技巧的共同点。
【解决方案2】:

(回答问题以提供关闭)。

Tomcat 中请求/响应的默认编码是 ISO-8859-1(根据 servlet 规范的要求)

参考:http://wiki.apache.org/tomcat/FAQ/CharacterEncoding

我通过在 server.xml 中为 8080 连接器设置 URIEncoding="UTF-8" 解决了这个问题。

请参考这些好人提供的所有cmet。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-01-09
    • 1970-01-01
    • 1970-01-01
    • 2012-09-11
    • 1970-01-01
    • 2012-09-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多