首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >request.getCharacterEncoding()返回空..。为什么?

request.getCharacterEncoding()返回空..。为什么?
EN

Stack Overflow用户
提问于 2012-09-10 19:20:28
回答 2查看 11.6K关注 0票数 9

我的一位同事创造了一种基本的触点-us型形式,这是一个破烂的重音字符(èe,é,à等)。我们在Struts 1上使用的是Java电子商务平台KonaKart。

我已经将问题缩小到通过HttpServletRequest对象输入的数据。比较类似(正常功能)表单,我注意到在旧表单上请求对象的字符编码(request.getCharacterEncoding())返回为"UTF-8",但在新表单上返回为NULL,来自request.getParameter()的文本已经损坏。

除此之外,我还没有发现在已知的好的形式和新的和破碎的形式之间有什么显著的区别。

我已经排除的事情:

  • 两个HTML页面都有标记:<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
  • HTML中的两个表单标记都使用POST,并且不设置编码
  • 从Firebug中检查,请求头和响应头都具有相同的属性
  • 两个JSP页面在<%@page contentType="text/html;charset=UTF-8" language="java" %>标记中使用相同的属性。
  • *Form.java文件中没有什么有趣的东西,它们都是从BaseValidatorForm继承的
  • 我检查了源文件编码,它们都被设置为默认-从容器继承: UTF-8

如果我把它们从ISO-8859-1转换成UTF-8,那就很好了,但我更愿意找出核心问题。例:new String(request.getParameter("firstName").getBytes("ISO-8859-1"),"UTF8")

任何建议都是受欢迎的,我已经没有主意了。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-09-10 19:25:13

现代浏览器通常不提供HTTP Content-Type头中的字符编码。但是,对于基于HTML的应用程序,其字符编码与初始HTTP的Content-Type头中指定的字符编码相同,该响应与表单一起服务于页面。您需要自己显式地将请求字符编码设置为相同的编码,在您的情况下,这就是UTF-8。

代码语言:javascript
复制
request.setCharacterEncoding("UTF-8");

在从请求中检索任何请求参数之前都要这样做(否则为时已晚;服务器平台默认编码将用于解析参数,这通常是ISO-8859-1)。映射在servlet过滤器上的/*是一个很好的地方。

另请参阅:

  • Unicode -如何得到正确的字符?
票数 15
EN

Stack Overflow用户

发布于 2012-09-10 19:26:31

request.getCharacterEncoding()依赖于Content-Type请求属性,而不是Accept-Charset

因此,application/x-www-form-urlencoded;charset=IS08859_1应该为POST操作工作。<%@page标记不影响POST数据。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12358101

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档