gpt4 book ai didi

java - req.getParameter 返回值错误的字符编码

转载 作者:行者123 更新时间:2023-12-02 00:40:36 25 4
gpt4 key购买 nike

我正在尝试使用 getParameter 从 JSP 获取值,其中包括 ü、é、à 等。但是在 servlet 中获取错误的值。我用 firebug 检查了内容类型,发现

Content-Type    text/html;charset=UTF-8

用 firebug 检查了 POST 部分,并在那里找到了正确的值,当我尝试在 servlet 中访问它时,它是错误的。给出 ö 而不是 ö

req.getCharacterEncoding(); 

返回空值。

尝试设置

 req.setCharacterEncoding("UTF-8");

位于 servlet 的开头,但没有帮助。

编辑:

req.getParameter("myValue").getBytes("8859_1"), "utf-8")

上面的行给出了正确的值。

最佳答案

来自http://wiki.apache.org/tomcat/FAQ/CharacterEncoding

HTTP 查询字符串的字符集(即“GET 参数”的技术术语)可以在“URI 语法”规范的第 2 节和 2.1 节中找到。字符集定义为 US-ASCII。任何未映射到 US-ASCII 的字符都必须以某种方式进行编码。 URI 语法规范的第 2.1 节规定,US-ASCII 之外的字符必须使用 % 转义序列进行编码:每个字符都编码为文字 %,后跟两个指示其字符代码的十六进制代码。因此,a(US-ASCII 字符代码 97 = 0x61)相当于 %61。任何地方都没有指定 URI 的默认编码,这就是为什么在解码这些值时会出现很多困惑。

该页面确实提到了在 Tomcat servlet 上运行时影响此行为的 2 种可能方法:

  • 将 server.xml 中元素的 URIEncoding 属性设置为特定内容(例如 URIEncoding="UTF-8")。
  • 将 server.xml 中元素的 useBodyEncodingForURI 属性设置为 true。这将导致连接器使用请求主体的 GET 参数编码。

关于java - req.getParameter 返回值错误的字符编码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6506721/

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