我的一位同事创造了一种基本的触点-us型形式,这是一个破烂的重音字符(èe,é,à等)。我们在Struts 1上使用的是Java电子商务平台KonaKart。
我已经将问题缩小到通过HttpServletRequest对象输入的数据。比较类似(正常功能)表单,我注意到在旧表单上请求对象的字符编码(request.getCharacterEncoding())返回为"UTF-8",但在新表单上返回为NULL,来自request.getParameter()的文本已经损坏。
除此之外,我还没有发现在已知的好的形式和新的和破碎的形式之间有什么显著的区别。
我已经排除的事情:
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><%@page contentType="text/html;charset=UTF-8" language="java" %>标记中使用相同的属性。如果我把它们从ISO-8859-1转换成UTF-8,那就很好了,但我更愿意找出核心问题。例:new String(request.getParameter("firstName").getBytes("ISO-8859-1"),"UTF8")
任何建议都是受欢迎的,我已经没有主意了。
发布于 2012-09-10 19:25:13
现代浏览器通常不提供HTTP Content-Type头中的字符编码。但是,对于基于HTML的应用程序,其字符编码与初始HTTP的Content-Type头中指定的字符编码相同,该响应与表单一起服务于页面。您需要自己显式地将请求字符编码设置为相同的编码,在您的情况下,这就是UTF-8。
request.setCharacterEncoding("UTF-8");在从请求中检索任何请求参数之前都要这样做(否则为时已晚;服务器平台默认编码将用于解析参数,这通常是ISO-8859-1)。映射在servlet过滤器上的/*是一个很好的地方。
另请参阅:
发布于 2012-09-10 19:26:31
request.getCharacterEncoding()依赖于Content-Type请求属性,而不是Accept-Charset
因此,application/x-www-form-urlencoded;charset=IS08859_1应该为POST操作工作。<%@page标记不影响POST数据。
https://stackoverflow.com/questions/12358101
复制相似问题