在瀏覽器端使用XMLHttpRequest對象向伺服器端傳送中文參數,如果不在瀏覽器端和伺服器端進行處理時,會出現中文亂碼問題.針對這種問題,有很多的解決辦法,但往往都是在IE下可以正常顯示中文,在其他瀏覽器下(比如FireFox)卻仍然是亂碼.在FireFox下解決了亂碼問題,但回到IE下訪問卻出現了亂碼問題.所以針對要在目前流行的各種瀏覽器下解決中文亂碼問題,才能使編寫的Web程式變得通用.
針對這種問題的解決方案,我總結大致有兩種:
一,在瀏覽器端對要傳遞的中文參數進行編碼處理.代碼如下:
xmlhttp.open("POST","AjaxServlet",true); //請求參數初始化
xmlhttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded"); //因為請求方式為POST,所以這裡要佈建要求頭.(如果請求方式為GET,此句代碼可以省略)
xmlhttp.send("name="+encodeURI(encodeURI("中國"))); //向伺服器端發送參數
在伺服器端代碼:
PrintWriter out = response.getWriter(); //得到response的輸出資料流對象
String name1 = request.getParameter("name"); //得到KEY為"name"的請求參數
String name = URLDecoder.decode(name1,"utf-8"); //對得到的參數進行解碼
out.print(name); //向瀏覽器端發送資料
二,在瀏覽器端對要傳遞的中文參數進行編碼處理.代碼如下:
xmlhttp.open("POST","AjaxServlet",true); //請求參數初始化
xmlhttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded"); //因為請求方式為POST,所以這裡要佈建要求頭.(如果請求方式為GET,此句代碼可以省略)
xmlhttp.send("name="+encodeURI("中國")); //向伺服器端發送參數
在伺服器端代碼:
PrintWriter out = response.getWriter(); //得到response的輸出資料流對象
String name1 = request.getParameter("name"); //得到KEY為"name"的請求參數
String name = new String((name1.getBytes("ISO-8859-1")),"UTF-8"); //對得到的參數進行解碼
out.print(name); //向瀏覽器端發送資料
以上兩種方法,在使用XMLHttpRequest對象傳遞中文參數時,亂碼問題可以在任意瀏覽器下解決,正確顯示中文.
該文章轉載自網路大本營:http://www.xrss.cn/Dev/AJAX/2007101717013.Html