中文的編碼方式取決于瀏覽器,chrome為UTF-8,IE為GB2312,這是由于瀏覽器并沒有遵循URI編碼規(guī)范。有兩種解決方法:
開發(fā)過程中,將查詢字符串提前編碼,
如: http://www.baidu.com/demo?demo=%D6%D0%B9%FA (UTF-8編碼)
在Servlet的doGet()方法中添加
String value = http://www.chinaznyj.com//GuoNeiZiXun/new String(request.getParameter("parameterName").getBytes("ISO-8859-1"),"瀏覽器的編碼方式");
表單中的get和post數(shù)據(jù)包含中文
中文的編碼方式取決于上文的contentType中的charset,有兩種解決辦法:
在Servlet的doPost()方法中添加request.setCharacterEncoding(“charset的值”);(僅對post有用)
在Servlet的doPost()方法中添加
String value = http://www.chinaznyj.com//GuoNeiZiXun/new String(request.getParameter("parameterName").getBytes("ISO-8859-1"),"charset的值");
三、原理
我們通過上面的方法可以解決亂碼問題,下面講講原理:
客戶端發(fā)到服務(wù)器的數(shù)據(jù)需要在客戶端進行編碼,類似于:String parameterName = "中國".getBytes("UTF-8")然后將編碼后的數(shù)據(jù)發(fā)到服務(wù)器。
客戶端接受數(shù)據(jù),request.getParameter(“”)的作用就是對接收到的數(shù)據(jù)進行解碼,默認使用ISO-8859-1進行解碼,可以使用request.setCharacterEncoding(“”)進行設(shè)置,但僅對post有用。假如我們使用默認的ISO-8859-1,肯定亂碼,因為編碼跟解碼不一致,那此時怎么辦呢,引出了上文中的兩種解決方案:使用request.setCharacterEncoding(“”)改變request.getParameter(“”)的解碼方式或者new String(request.getParameter("parameterName").getBytes("ISO-8859-1"),"charset的值")將request.getParameter(“”)解碼的數(shù)據(jù)重新編碼再解碼。