最后一個奇數漢字出現亂碼解決方案
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);
- }
posted on 2010-08-05 21:57 強強 閱讀(2005) 評論(1) 編輯 收藏 所屬分類: Java 、web技巧