java開發中中文亂碼總結

1.jsp頁面內容顯示亂碼

這種亂碼緣由很簡單,通常的工具或解碼程序對中文字符解析時採用默認的解碼方式:javascript

<%@ page contentType="text/html; charset=ISO-8859-1"%>html

咱們只需修改其編碼方式便可,以下:java

<%@ page contentType="text/html; charset=UTF-8"%>web

字符集:UTF-8 > GBK > GB2312tomcat

2.jsp 與 Servlet 間跳轉出現中文亂碼

2.1: method="Post"

jsp 中form 表單的 ation="XxxServlet",method="Post"時,提交表單後每每發現中文的屬性值在 Servlet 中獲取後變亂碼。服務器

此時須要定位到 doPost() 方法,首先在方法內首行加上以下 code:jsp

      request.setCharacterEncoding("UTF-8");工具

意思是設置 request 的編碼爲 "UTF-8",通常與 jsp 頁面一致編碼

而後,再添加 code:url

      response.setCharacterEncoding("UTF-8");

response.setContentType("text/html;charset=UTF-8");

意思是設置 response 的編碼爲 "UTF-8",即 Servlet 回傳 jsp 時的編碼,上面兩段用其一便可,保持一致是關鍵。

2.2:method="Get"

jsp 中form 表單的 ation="XxxServlet",method="Get"時,提交表單後每每發現中文的屬性值在 Servlet 中獲取後變亂碼。

此時需定位的 tomcat 的安裝目錄 %TOMCAT%/conf/server.xml 文件 

尋找以下代碼片斷:

1.    <Connector port="8080" protocol="HTTP/1.1"    

2.      maxThreads="150"     

3.      connectionTimeout="20000"    

4.      redirectPort="8443"  

5.         URIEncoding="UTF-8"/>  

手動加上URIEncoding="UTF-8"

3.    javascript url 傳遞參數中文亂碼問題

方案一

html頁面:

function testOne() {
           var url = "testTwo.action?expr="+你好;

     window.location.href = encodeURI(url);

}

後臺java代碼:

String expr = new String(

request.getParameter("expr").getBytes("ISO-8859-1"),"UTF-8");

 方案二

html頁面:

function testTwo() {

var url = "testTwo.action?expr="+你好;

      window.location.href= encodeURI(encodeURI(url));

}

後臺java代碼:

String expr = java.net.URLDecoder.decode(lrequest.getParameter("expr") , "UTF-8");

若是用的是weblogic服務器的話,用方案二是能夠解決的(個人weblogic的版本是weblogic 9.2的),方案一解決不了。

若是是tomcat服務器的話,這兩個方案均可以;也能夠在傳遞參數不處理,後臺用

String expr = new String(request.getParameter("expr").getBytes("ISO-8859-1"),"UTF-8"); 

也是能夠的。

4.     Java web下載文件文件名亂碼

第一種: 設置  

response.setHeader("Content-Disposition", "attachment; filename=" + java.net.URLEncoder.encode(fileName, "UTF-8"));

這裏將文件名編碼成UTF-8的格式,就不會出現URL出錯了。IE6下注意中文文字不能超過超過17個。

 第二種:設置

response.setHeader( "Content-Disposition", "attachment;filename="  + new String( fileName.getBytes("gb2312"), "ISO8859-1" ) );

將中文名編碼爲ISO8859-1的方式。不過該編碼只支持簡體中文.

按照上訴方式,能夠綜合一下兩種方式解決絕大部分中文問題。

 fileName = URLEncoder.encode(fileNameSrc,"UTF-8");

if(fileName.length()>150)//解決IE 6.0 bug {

      fileName=new String(fileNameSrc.getBytes("GBK"),"ISO-8859-1");

response.setHeader( "Content-Disposition", "attachment;filename="  + fileName);

}

相關文章
相關標籤/搜索