乱码解决问题
在項目開發中常常遇到亂碼問題,使我們很苦惱,下面我介紹經常遇見的亂碼問題以及相應的解決辦法。
1.post方式提交中文數據亂碼產生的原因和解決辦法
之所以會產生亂碼,就是因為服務器和客戶端溝通的編碼不一致造成的,因此解決的辦法是:在客戶端和服務器之間設置一個統一的編碼,之后就按照此編碼進行數據的傳輸和接收。
由于客戶端是以UTF-8字符編碼將表單數據傳輸到服務器端的,因此服務器也需要設置以UTF-8字符編碼進行接收,要想完成此操作,服務器可以直接使用從ServletRequest接口繼承而來的"setCharacterEncoding(charset)"方法進行統一的編碼設置。修改后的代碼如下:
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
/**
* 客戶端是以UTF-8編碼傳輸數據到服務器端的,所以需要設置服務器端以UTF-8的編碼進行接收,否則對于中文數據就會產生亂碼
*/
request.setCharacterEncoding("UTF-8");//使用request.setCharacterEncoding("UTF-8");設置服務器以UTF-8的編碼接收數據后,此時就不會產生中文亂碼問題了
String userName = request.getParameter("userName");
System.out.println("userName:"+userName);
}
2?以GET方式提交表單中文參數的亂碼問題
對于以get方式傳輸的數據,request即使設置了以指定的編碼接收數據也是無效的,默認的還是使用ISO8859-1這個字符編碼來接收數據,客戶端以UTF-8的編碼傳輸數據到服務器端,而服務器端的request對象使用的是ISO8859-1這個字符編碼來接收數據,服務器和客戶端溝通的編碼不一致因此才會產生中文亂碼的。解決辦法:在接收到數據后,先獲取request對象以ISO8859-1字符編碼接收到的原始數據的字節數組,然后通過字節數組以指定的編碼構建字符串,解決亂碼問題。
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
/**
*
* 對于以get方式傳輸的數據,request即使設置了以指定的編碼接收數據也是無效的,默認的還是使用ISO8859-1這個字符編碼來接收數據
*/
String name = request.getParameter("name");//接收數據
name =new String(name.getBytes("ISO8859-1"), "UTF-8") ;//獲取request對象以ISO8859-1字符編碼接收到的原始數據的字節數組,然后通過字節數組以指定的編碼構建字符串,解決亂碼問題
System.out.println("name:"+name);
}
3?以超鏈接形式傳遞中文參數的亂碼問題
<a href="${pageContext.request.contextPath}/servlet/RequestDemo05?userName=gacl&name=海頤軟件">點擊</a>
點擊超鏈接,數據是以get的方式傳輸到服務器的,所以接收中文數據時也會產生中文亂碼問題,而解決中文亂碼問題的方式與上述的以get方式提交表單中文數據亂碼處理問題的方式一致,如下所示:
1 String name = request.getParameter("name");
2 name =new String(name.getBytes("ISO8859-1"), "UTF-8");
另外,需要提的一點就是URL地址后面如果跟了中文數據,那么中文參數最好使用URL編碼進行處理,如下所示:
<a href="${pageContext.request.contextPath}/servlet/RequestDemo05?userName=gacl&name=<%=URLEncoder.encode("徐達沛", "UTF-8")%>">點擊</a>
?
轉載于:https://www.cnblogs.com/zhangzhiqin/p/8127332.html
總結
- 上一篇: 【转载】中文输入法下onKeyPress
- 下一篇: tomcat8配置tomcat-user