我用了一个过滤器设置request.setCharacterEncoding("UTF-8");但是在接收URL中文参数的时候会出现乱码,通过
转码可以转换成中文new String(keyword.getBytes("iso-8859-1"),"UTF-8"),但是原本过滤器里面已经用了UTF-8,
所以为什么这个地方还要转码呢?
转码可以转换成中文new String(keyword.getBytes("iso-8859-1"),"UTF-8"),但是原本过滤器里面已经用了UTF-8,
所以为什么这个地方还要转码呢?
解决方案 »
- 测试listOrderByNumber方法时出现的 bug
- 北美ERP公司诚聘JAVA/WEB开发人才(J2EE/JSP等)
- 如何动态地生成下拉菜单
- 请问前辈们!!!客户端和服务端是如何通讯的?
- struts2 对象属性问题
- javamail中附件类型如何判断?请大家进来指点一下。
- WEB页面的数据校验问题,如何控制输入特定字符,如整数~~~急
- (100分征集)如何做使得访问JSP服务器时不用加端口号(当然不能用80)??
- 如何将在tomcat里调试通过的程序发布到WEBSPHERE 3.5里?需要注意什么?
- web.xml配置过滤器的问题
- j2ee开发动态树状JSP页面,用什么树控件好?最好提供一个成功例子
- JSP网页空格
<%@ page contentType="text/html; charset=utf-8" language="java" import="java.sql.*" errorPage="" %>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>测试数据</title>
</head>
<body>
<%
String test=request.getParameter("test");
out.print(test);
%>
</body>
</html>
结果发现是乱码这是因为 tomcat 取得数据以后转为iso8859-1发送给formsave.jsp引起的
过程formpost.jsp (utf-8)--------->>> tomcat(数据iso8859-1)-------------->>>>formsave.jsp(utf-8)
所以要在formpost.jsp 加入 test=new String(test.getBytes("ISO8859_1"),"utf-8");
这样做要在每个页面加入这个代码很麻烦 所以最好在每个页面加载前使用过滤器
(过滤器 在web.xml中注册)
但是如果提交的页面是采用get或者js写路径的方式提交过滤器不起作用
这是解决方法
Get走的是url提交,而在进入url之前已经进行了iso8859-1的编码处理。要想影响这个编码则需要在server.xml的Connector节点增加useBodyEncodingForURI="true" 属性配置,即可控制tomcat对get方式的汉字编码方式,上面这个属性控制get提交也是用request.setCharacterEncoding ("UTF-8")所设置的编码格式进行编码。所以自动编码为utf-8,接受页面正常接受就可以了。但我认为真正的编码过程是,tomcat又要根据<Connector port="8080" maxThreads="150" minSpareThreads="25" maxSpareThreads="75" enableLookups="false" redirectPort="8443" acceptCount="100" debug="0" connectionTimeout="20000" useBodyEncodingForURI="true" disableUploadTimeout="true" URIEncoding=”UTF-8”/>
(tomcat6.0的时候似乎最后面的URIEncoding=”UTF-8”不能加,或者不用加,不加测试通过)里面所设置的URIEncoding=”UTF-8”再进行一次编码,但是由于已经编码为utf-8,再编码也不会有变化了。如果是从url获取编码,接受页面则是根据URIEncoding=”UTF-8”来进行解码的
request.setCharacterEncoding("UTF-8");这一句只对post方式提交的实体部分奏效
对于在url中传递的参数无效。
可以更改useBodyEncodingForURI参数使url中的参数解码时采用和实体相同的字符集。
如下
\conf\server.xml中
查找<Connector port="8080"
在 />前添加 useBodyEncodingForURI="true"