最后一个奇数汉字出现乱码解决方案

1.统一用UTF-8编码,即Tomcat的server.xml、页面、过滤器都用UTF-8
2.
请求参数,需要编码

"
target="frameset">Xls表数据管理


假如是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);

}

你可能感兴趣的:(最后一个奇数汉字出现乱码解决方案)