java與jsp傳遞值的亂碼解決方案

來源:互聯網
上載者:User

Java中預設的編碼方式是 UNICODE,所以用中文易出問題,常見的解決是

Java代碼 
1.String s2 = new String(s1.getBytes("ISO-8859-1"),"UTF-8"); 
String s2 = new String(s1.getBytes("ISO-8859-1"),"UTF-8"); 1、utf8解決JSP中文亂碼問題:
一般說來在每個頁面的開始處,加入:

Jsp代碼 
1.<%@ page language="java" contentType="text/html; charset=UTF-8" 
2.    pageEncoding="UTF-8"%>  
3.<% request.setCharacterEncoding("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"); 是對請求進行了中文編碼.
 
有時,這樣仍不能解決問題,還需要這樣處理一下:

Java代碼 
1.String msg = request.getParameter("message");  
2.String str=new String(msg.getBytes("ISO-8859-1"),"UTF-8");  
3.out.println(str); 
String msg = request.getParameter("message");
String str=new String(msg.getBytes("ISO-8859-1"),"UTF-8");
out.println(str); 

2、Tomcat 5.5 中文亂碼:
 
(1).只要把%TOMCAT安裝目錄%/webapps/servlets-examples/WEB-INF/classes/filters/SetCharacterEncodingFilter.class檔案

拷到你的webapp目錄/filters下,如果沒有filters目錄,就建立一個。
(2).在你的web.xml裡加入如下幾行: 

Xml代碼 
1.<filter>    
2.   <filter-name>Set Character Encoding</filter-name>    
3.   <filter-class>filters.SetCharacterEncodingFilter</filter-class>    
4.   <init-param>     
5.      <param-name>encoding</param-name>    
6.      <param-value>GBK</param-value>    
7.   </init-param>    
8.</filter>    
9.<filter-mapping>    
10.   <filter-name>Set Character Encoding</filter-name>    
11.   <url-pattern>/*</url-pattern>    
12.</filter-mapping>  
  <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).完成。
get方式的解決辦法:
(1).開啟tomcat的server.xml檔案,找到區塊,加入如下一行:URIEncoding="UTF-8"
  完整的應如下:  

Java代碼 
1.<Connector      
2.  port="80"   maxThreads="150"   minSpareThreads="25"   maxSpareThreads="75"    

3.  enableLookups="false"   redirectPort="8443"   acceptCount="100"    
4.  debug="0"   connectionTimeout="20000"      
5.  disableUploadTimeout="true"      
6.  URIEncoding="UTF-8"  />  
<Connector   
  port="80"   maxThreads="150"   minSpareThreads="25"   maxSpareThreads="75" 
  enableLookups="false"   redirectPort="8443"   acceptCount="100" 
  debug="0"   connectionTimeout="20000"   
  disableUploadTimeout="true"   
  URIEncoding="UTF-8"  />  

(2).重啟tomcat,一切OK。

3、XMLHttpRequest中文問題

頁面jsp用的UTF-8編碼:
代碼

Jsp代碼 
1.<%@ page contentType="text/html; charset=GBK"%>   
<%@ page contentType="text/html; charset=GBK"%>   

javascript部分:

Js代碼 
1.function addFracasReport() {    
2.    var url="servlet/encodingServlet";    
3.    //var urlmsg="&reportId="+fracasReport1.textReportId.value;  //故障報告表編號    
4.    var xmlHttp=createXmlHttpRequest() ;  
5.    xmlHttp.onreadystatechange = function(){  
6.        //對象的狀態為4表示已完成  
7.        if(xmlHttp.readyState==4){  
8.            //成功返回200,沒有修改返回304  
9.            if(xmlHttp.status==200||xmlHttp.status==304){  
10.                //開始處理資訊  
11.                //alert(xhr.responseText) ;  
12.                alert("請求發送成功") ;  
13.            }  
14.        }  
15.    }  
16.    xmlHttp.open("POST",url,true);    
17.    xmlHttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded");  

18.    var urlmsg = "hello=你好&world=世界"    
19.    xmlHttp.send(urlmsg);    
20.} 
function addFracasReport() { 
    var url="servlet/encodingServlet"; 
    //var urlmsg="&reportId="+fracasReport1.textReportId.value;  //故障報告表編號 
    var xmlHttp=createXmlHttpRequest() ;
    xmlHttp.onreadystatechange = function(){
  //對象的狀態為4表示已完成
  if(xmlHttp.readyState==4){
   //成功返回200,沒有修改返回304
   if(xmlHttp.status==200||xmlHttp.status==304){
    //開始處理資訊
    //alert(xhr.responseText) ;
    alert("請求發送成功") ;
   }
  }
 }
    xmlHttp.open("POST",url,true); 
    xmlHttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
    var urlmsg = "hello=你好&world=世界" 
    xmlHttp.send(urlmsg); 
} 此時,如果前台引用JS代碼的JSP頁面用的全部是UTF-8編碼,那麼在後擷取時,不會出現亂碼問題,例如在Servlet中用String

hello = request.getParameter("hello") ;擷取並用System.out.println(hello) ;輸出到控制台上.但是如果用

response.getWriter().print(hello);輸出到頁面上的話,會出現亂碼問題,此時可以在Servlet中用

response.setCharacterEncoding("UTF-8") ;進行轉碼.

4、toad的字元集的設定與oracle的安裝
oracle資料庫伺服器的安裝一般是中文字元集,有時安裝在不同的平台下,設定為ISO編碼,toad是oracle開發的最好工具,不是

我說的,可是中文環境下安裝的toad,開啟英文字元的oracle時,中文全是亂碼。必須進行設定.

環境變數->系統變數
加NLS_lANG=SIMPLIFIED CHINESE_CHINA.ZHS16GBK

NLS_lANG=AMERICAN_AMERICA.WE8ISO8859P1  AMERICAN_AMERICA.WE8MSWIN1252

或者

開啟註冊表,點擊HKEY_LOCAL_MATHINE再點擊Software,再點擊ORACLE在點擊HOME(ORACLE所在目錄)在註冊表的右半面有

NLS_LANG,雙擊它,將你想要的覆蓋掉原來的就可以了最好記下舊的,以便可以改回來。

Sql代碼 
1.connect sys/change_on_install  
2.update props$  
3.set value$='ZHS16CGB231280' 
4.where name='NLS_CHARACTERSET';  
5.commit; 
connect sys/change_on_install
update props$
set value$='ZHS16CGB231280'
where name='NLS_CHARACTERSET';
commit;這樣就OK了

5.如何解決GWT(google web toolkit)中文的問題
GWT 中文亂碼解決方案

(1).把你要顯示的中文“測試字串”輸入到一個檔案,如:1.txt
(2).進入命令列,進入1.txt所在的目錄,敲入以下命令:native2ascii.exe 1.txt 2.txt 斷行符號。這樣就產生了另外一個檔案2.txt


(3).2.txt的內容如下:\u6d4b\u8bd5\u5b57\u7b26\u4e32
(4).然後用上面的編碼,在gwt中使用,就可以了.

6.xmlHttp得到的網頁怎麼是亂碼?
(1).在伺服器端使用WebRequest而不是xmlHttp.
(2).將StreamReader sr = new StreamReader(stream);
對於簡體中文改成:
StreamReader sr = new StreamReader(stream , Encoding.Default );
對於utf-8改成:
StreamReader sr = new StreamReader(stream , Encoding.UTF8 );
當然,Encoding枚舉還有很多其他的成員,對於不同的編碼content-type可以有選擇的應用
(3).後來我發現無論是content-type是gb2312還是utf-8,用
StreamReader sr = new StreamReader(stream , Encoding.Default );
都可以返回正常的漢字,所以統一的改成Encoding.Default
最後,在伺服器端從一個url獲得網頁的原始碼的代碼如下:

Java代碼 
1./// <summary>  
2./// post一個指定的url,獲得網頁的原始碼(用WebRequest實現)  
3./// </summary>  
4./// <param name="url"></param>  
5./// <returns>  
6./// 如果請求失敗,返回null  
7./// 如果請求成功,返回網頁的原始碼  
8./// </returns>  
9.public static string GetContentFromUrl2( string url )  
10.{  
11.    //變數定義  
12.    string respstr;  
13. 
14.    WebRequest myWebRequest=WebRequest.Create(url);  
15.    //            myWebRequest.PreAuthenticate=true;  
16.    //            NetworkCredential networkCredential=new NetworkCredential( username , password , domain );  

17.    //            myWebRequest.Credentials=networkCredential;  
18. 
19.    // Assign the response object of 'WebRequest' to a 'WebResponse' variable.  

20.    WebResponse myWebResponse=myWebRequest.GetResponse();  
21.    System.IO.Stream stream = myWebResponse.GetResponseStream();  
22.    StreamReader sr = new StreamReader(stream , Encoding.Default );  
23.    //以字串形式讀取資料流  
24.    respstr = sr.ReadToEnd();  
25.    sr.Close();  
26.    
27.    return respstr;  
28.        
29.} 
/// <summary>
/// post一個指定的url,獲得網頁的原始碼(用WebRequest實現)
/// </summary>
/// <param name="url"></param>
/// <returns>
/// 如果請求失敗,返回null
/// 如果請求成功,返回網頁的原始碼
/// </returns>
public static string GetContentFromUrl2( string url )
{
    //變數定義
    string respstr;

    WebRequest myWebRequest=WebRequest.Create(url);
    //            myWebRequest.PreAuthenticate=true;
    //            NetworkCredential networkCredential=new NetworkCredential( username , password , domain );
    //            myWebRequest.Credentials=networkCredential;

    // Assign the response object of 'WebRequest' to a 'WebResponse' variable.
    WebResponse myWebResponse=myWebRequest.GetResponse();
    System.IO.Stream stream = myWebResponse.GetResponseStream();
    StreamReader sr = new StreamReader(stream , Encoding.Default );
    //以字串形式讀取資料流
    respstr = sr.ReadToEnd();
    sr.Close();
 
    return respstr;
     

7.解決weblogic/webshpere中文問題:
在web.xml檔案中需要配置中文環境。如下:

Xml代碼 
1.<context-param> 
2.  <param-name>weblogic.httpd.inputCharset./*</param-name> 
3.  <param-value>GB2312</param-value> 
4.</context-param> 
<context-param>
  <param-name>weblogic.httpd.inputCharset./*</param-name>
  <param-value>GB2312</param-value>
</context-param>

8.利用JS過渡,在Java類中轉碼接收(適用WebSphere).

Js代碼 
1.// 前台JS代碼如下  
2.var url = strAction+"?method=startProc&proName="+encodeURI(encodeURI('要傳的漢字')); 

// 前台JS代碼如下
var url = strAction+"?method=startProc&proName="+encodeURI(encodeURI('要傳的漢字'));

Java代碼 
1.// 後台Action中解碼如下  
2.zjmc = java.net.URLDecoder.decode('要傳的漢字',"UTF-8");  
3.System.out.println(zjmc) ; 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.