解析Java中文亂碼的處理方法

 

  • 本文作者總結了自己幾年來在Java開發中遇到的各種各樣的中文亂碼的解決方法,與大家共享。

 

【引自程序猶如人生的博客】爲什麼說亂碼是中國程序員無法避免的話題呢?這個首先要從編碼機制上說起,大家都是中文和英文的編碼格式不是一樣,解碼也是不一樣的!如果中國的程序員不會遇到亂碼,那麼只有使用漢語編程。漢語編程是怎麼回事,我也不大清楚,應該是前年吧!我一朋友給我介紹漢語編程,怎麼不錯不錯?當時因爲學習忙沒去關注這個,等我閒了,那個朋友不弄這個,問他,他也不說不大清楚,最後自己對這個學習也不了了之了。

我寫這個不是講解中英文之間的差距,解碼等,我是將我在這幾年工作遇到各種各樣的亂碼的解決方法,總結起來,也希望大家能把自己暈倒解決亂碼的方法都說出來,咱們弄一個解決亂碼的“葵花寶典”。

對於Java,由於默認的編碼方式是UNICODE,所以用中文也易出問題,常見的解決是:

 

String s2 = new String(s1.getBytes(“ISO-8859-1”),”GBK”);

 

1、utf8解決JSP中文亂碼問題

一般說來在每個頁面的開始處,加入:

 

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

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

<%
request.setCharacterEncoding("UTF-8");
%>

 

◆charset=UTF-8的作用是指定JSP向客戶端輸出的編碼方式爲“UTF-8”;
◆pageEncoding="UTF-8",爲了讓JSP引擎能正確地解碼含有中文字符的JSP頁面,這在LINUX中很有效;
◆request.setCharacterEncoding("UTF-8");是對請求進行了中文編碼。

 

有時,這樣仍不能解決問題,還需要這樣處理一下:

 

String msg = request.getParameter("message");
String str=new String(msg.getBytes("ISO-8859-1"),"UTF-8");
out.println(st);

 

2、Tomcat 5.5中文亂碼

只要把%TOMCAT安裝目錄%/   webapps\servlets-examples\WEB-INF\classes\filters\SetCharacterEncodingFilter.class文件拷到你的webapp目錄/filters下,如果沒有filters目錄,就創建一個。  

2)在你的web.xml里加入如下幾行:

 

  <filter>   
<filter-name>Set   Character   Encoding</filter-name>  
<filter-class>filters.SetCharacterEncodingFilter</filter-class>  
<init-param>  
<param-name>encoding</param-name>  
<param-value>GBK</param-value>  
</init-param>  
</filter>  
<filter-mapping>  
<filter-name>Set   Character   Encoding</filter-name>  
<url-pattern>/*</url-pattern>  
</filter-mapping>

 

3)完成

2、get方式的解決辦法

1)打開tomcat的server.xml文件,找到區塊,加入如下一行:  

 

  URIEncoding=”GBK”

 

完整的應如下:

 

  port="80"   maxThreads="150"   minSpareThreads="25"   maxSpareThreads="75"   
enableLookups="false"   redirectPort="8443"   acceptCount="100"  
debug="0"   connectionTimeout="20000"    
disableUploadTimeout="true"    
URIEncoding="GBK"  
/>

 

2)重啓tomcat,一切OK。

3、xmlHttpRequest中文問題

頁面jsp用的GBK編碼

代碼:

 

<%@ page contentType="text/html; charset=GBK"%>
javascript部分

 

代碼:

 

function addFracasReport() {   
var url="controler?actionId=0_06_03_01&actionFlag=0010";  
var urlmsg="&reportId="+fracasReport1.textReportId.value;  //故障報告表編號  

var xmlHttp=Common.createXMLHttpRequest();  
xmlHttp.onreadystatechange = Common.getReadyStateHandler(xmlHttp,
       eval("turnAnalyPage"));   
xmlHttp.open("POST",url,true);  
xmlHttp.setRequestHeader( " Content-Type " , "
       application/x-www-form-urlencoded);   
xmlHttp.send(urlmsg);         
}


 


要了解更多請上轉載URL:http://developer.51cto.com/art/200708/53612.htm

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章