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