最后一個(gè)奇數(shù)漢字出現(xiàn)亂碼解決方案
1.統(tǒng)一用UTF-8編碼,即Tomcat的server.xml、頁面、過濾器都用UTF-8
2.
請求參數(shù),需要編碼
<a href="newsAction?name=<%=java.net.URLEncoder.encode("表數(shù)據(jù)管理","UTF-8")%>"
target="frameset">Xls表數(shù)據(jù)管理 </a>
假如是java代碼的話直接寫java.net.URLEncoder.encode("測試嗎","UTF-8");
下面引用Qieqie的一段代碼:
2.
請求參數(shù),需要編碼
<a href="newsAction?name=<%=java.net.URLEncoder.encode("表數(shù)據(jù)管理","UTF-8")%>"
target="frameset">Xls表數(shù)據(jù)管理 </a>
假如是java代碼的話直接寫java.net.URLEncoder.encode("測試嗎","UTF-8");
下面引用Qieqie的一段代碼:
- public static void main(String[] args) throws UnsupportedEncodingException {
- //給定某3個(gè)漢字
- String src = "你好啊";
- //String src = "一二三";
- //瀏覽器進(jìn)行utf-8編碼,并傳送到服務(wù)器
- byte[] bytes1 = src.getBytes("utf-8");
- System.out.println(bytes1.length);//9
- //tomcat以gbk方式解碼(這個(gè)片段的說明僅針對gbk處理漢字的情況)
- //如果一對漢字字節(jié)不符合gbk編碼規(guī)范,則每個(gè)字節(jié)使用'?'(ascii 63)代替
- //萬幸的話,只是最后一個(gè)(第9個(gè))字節(jié)因不能成對,變成問號(比如當(dāng)src="你好啊"時(shí))
- //不幸的話,中間某些字節(jié)就通不過gbk編碼規(guī)范出現(xiàn)'?'了(比如當(dāng)src="一二三"時(shí))
- //總之temp的最后一位必定是問號'?'
- String temp = new String(bytes1, "gbk");
- //你的action中的代碼
- //由于以上的tomcat以gbk解釋utf-8不能成功
- //所以此時(shí)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();
- //構(gòu)建出來的dest自然不是原先的src
- String dest = new String(bytes2, "utf-8");
- System.out.println(dest);
- }
posted on 2010-08-05 21:57 強(qiáng)強(qiáng) 閱讀(2006) 評論(1) 編輯 收藏 所屬分類: Java 、web技巧