今天在做JSP頁面的跳轉時,發現response.sendRedirect("../../../reportstat2/noselect.jsp?message=中文"),結果頁面顯示“中文”是亂碼。且跳轉的兩個頁面都是GBK編碼。上網查得response.sendRedirect("../../../reportstat2/noselect.jsp?message="+java.net.URLEncoder.encode("中文"));經過這樣轉換後,就沒問題了
用get方法傳遞中文時,必須經過編碼的動作.進行編碼時必須使用java.net套件中的URLEncoder類型的encode類別方法,其文法:java.net.URLEncoder.encode(字串)即:response.sendRedirect("err.jsp?msg"+java.net.URLEncoder.encode("中文")) .
要注意的是在response.sendRedirect之後,應該緊跟一句return,以防止原來的代碼繼續執行。另外注意的是response.sendRedirect("c.jsp")可能失敗。sendRedirect的參數應該包含Context Path部分,所以應改為response.sendRedirect(request.getServletContext().getContextPath() + "/c.jsp").
還有關於上述的中文問題的另一種解決方案:
String url="../../../reportstat2/noselect.jsp?message=中文";
url=new String(url.getBytes("GBK"),"ISO8859_1");
response.sendRedirect(url);
如果頁面層用的不是JSP可能無法先做這樣的處理,可以放到背景java處理常式來做編碼的轉換
String note=“頁面傳入的中文字串” byte buf[]=note.getBytes("ISO8859-1"); String remark=new String(buf,"GBK"); System.out.println(remark);//顯示的是中文,不是亂碼