1.统一用UTF-8编码,即Tomcat的server.xml、页面、过滤器都用UTF-8
2.
请求参数,需要编码
<a href="newsAction?name=<%=java.net.URLEncoder.encode("表数据管理","UTF-8")%>"
target="frameset">Xls表数据管理 </a>
假如是java代码的话直接写java.net.URLEncoder.encode("测试吗","UTF-8");
下面引用Qieqie的一段代码:
2.
请求参数,需要编码
<a href="newsAction?name=<%=java.net.URLEncoder.encode("表数据管理","UTF-8")%>"
target="frameset">Xls表数据管理 </a>
假如是java代码的话直接写java.net.URLEncoder.encode("测试吗","UTF-8");
下面引用Qieqie的一段代码:
public static void main(String[] args) throws UnsupportedEncodingException {
//给定某3个汉字
String src = "你好啊";
//String src = "一二三";
//浏览器进行utf-8编码,并传送到服务器
byte[] bytes1 = src.getBytes("utf-8");
System.out.println(bytes1.length);//9
//tomcat以gbk方式解码(这个片段的说明仅针对gbk处理汉字的情况)
//如果一对汉字字节不符合gbk编码规范,则每个字节使用'?'(ascii 63)代替
//万幸的话,只是最后一个(第9个)字节因不能成对,变成问号(比如当src="你好啊"时)
//不幸的话,中间某些字节就通不过gbk编码规范出现'?'了(比如当src="一二三"时)
//总之temp的最后一位必定是问号'?'
String temp = new String(bytes1, "gbk");
//你的action中的代码
//由于以上的tomcat以gbk解释utf-8不能成功
//所以此时bytes2和bytes1不一样
byte[] bytes2 = temp.getBytes("gbk");
System.out.println(bytes2.length);
for (int i = 0; i < bytes1.length; i++) {
System.out.print(bytes1[i] & 0xff);
System.out.print("\t");
}
System.out.println();
for (int i = 0; i < bytes2.length; i++) {
System.out.print(bytes2[i] & 0xff);
System.out.print("\t");
}
System.out.println();
//构建出来的dest自然不是原先的src
String dest = new String(bytes2, "utf-8");
System.out.println(dest);
}