分享java带来的快乐

我喜欢java新东西

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

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的一段代码:

Java代码 复制代码
  1. public static void main(String[] args) throws UnsupportedEncodingException {   
  2.     //给定某3个汉字   
  3.     String src = "你好啊";   
  4.     //String src = "一二三";   
  5.        
  6.     //浏览器进行utf-8编码,并传送到服务器   
  7.     byte[] bytes1 = src.getBytes("utf-8");   
  8.     System.out.println(bytes1.length);//9   
  9.        
  10.     //tomcat以gbk方式解码(这个片段的说明仅针对gbk处理汉字的情况)   
  11.     //如果一对汉字字节不符合gbk编码规范,则每个字节使用'?'(ascii 63)代替   
  12.     //万幸的话,只是最后一个(第9个)字节因不能成对,变成问号(比如当src="你好啊"时)   
  13.     //不幸的话,中间某些字节就通不过gbk编码规范出现'?'了(比如当src="一二三"时)   
  14.     //总之temp的最后一位必定是问号'?'   
  15.     String temp = new String(bytes1, "gbk");    
  16.        
  17.     //你的action中的代码   
  18.     //由于以上的tomcat以gbk解释utf-8不能成功   
  19.     //所以此时bytes2和bytes1不一样   
  20.     byte[] bytes2 = temp.getBytes("gbk");   
  21.     System.out.println(bytes2.length);   
  22.     for (int i = 0; i < bytes1.length; i++) {   
  23.         System.out.print(bytes1[i] & 0xff);   
  24.         System.out.print("\t");   
  25.     }   
  26.     System.out.println();   
  27.     for (int i = 0; i < bytes2.length; i++) {   
  28.         System.out.print(bytes2[i] & 0xff);   
  29.         System.out.print("\t");   
  30.     }   
  31.     System.out.println();   
  32.   
  33.     //构建出来的dest自然不是原先的src   
  34.     String dest = new String(bytes2, "utf-8");   
  35.     System.out.println(dest);   
  36.        
  37. }  

posted on 2010-08-05 21:57 强强 阅读(1985) 评论(1)  编辑  收藏 所属分类: Javaweb技巧

评论

# re: 最后一个奇数汉字出现乱码解决方案 2014-05-05 10:10

太热太热太热  回复  更多评论   


只有注册用户登录后才能发表评论。


网站导航:
博客园   IT新闻   Chat2DB   C++博客   博问