1. 程式人生 > >JavaScript(js) 前臺 引數傳遞亂碼 轉碼 問題--已解決! 中文字元亂碼

JavaScript(js) 前臺 引數傳遞亂碼 轉碼 問題--已解決! 中文字元亂碼

最多使用的應為encodeURIComponent,它是將中文、韓文等特殊字元轉換成utf-8格式的url編碼,所以如果給後臺傳遞引數需要使用encodeURIComponent時需要後臺解碼對utf-8支援(form中的編碼方式和當前頁面編碼方式相同)

escape不編碼字元有69個:*,+,-,.,/,@,_,0-9,a-z,A-Z

encodeURI不編碼字元有82個:!,#,$,&, ',(,),*,+,,,-,.,/,:,;,=,?,@,_,~,0-9,a-z,A-Z

encodeURIComponent不編碼字元有71個:!,    ',(,),*,-,.,_,~,0-9,a-z,A-Z
============================================================

做專案時,明明在 web.xml和struts中進行了字元設定 utf-8,但是 從前臺 js傳過來的引數還是亂碼問題,在後臺使用request.setCharacterEncoding("UTF-8");還是不行,上網上查了查原來js也有轉碼的方法,encodeURIComponent() 和 encodeURI(),下面來解決一下問題

例如 js 程式碼為:

var text= "關鍵字";

Location.href= "getChildNodeByKeyword.action?keyword="+text;

傳到後臺的 keyword是亂碼

解決方法1:

var text= encodeURIComponent("關鍵字");

Location.href= "getChildNodeByKeyword.action?keyword="+text;

解決方法2:

var text= "關鍵字";

Location.href= encodeURI("getChildNodeByKeyword.action?keyword="+text);

自己感覺encodeURIComponent() 和 encodeURI()的區別是 :

見上面的說明!

===================================

系統應用測試中,使用瞭如下語句:

UTF-8編碼,測試成功,服務端獲取正常:

decisionMaker = encodeURI(decisionMaker).replace(new RegExp("&", 'g'), "%26");//轉碼

===============Java設定編碼格式=========

首先介紹兩種字符集 gb2312 和 gbk 
。gb2312 簡體中文編碼
。gbk 中文字元編碼 包括繁體中文

1. 指定jsp檔案裡內容的的編碼方式

   <%@ page language="java" import="java.util.*"  pageEncoding="gb2312"%>

2. 指定html檔案裡內容的編碼方式
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
3. 當響應使用者的請求時,輸出到使用者瀏覽器上的編碼方式

   <%@ page contentType="text/html"; charset="gb2312"%>
   相當於生成的程式碼 response.setContentType("text/html; charset=gb2312");

4. 把使用者傳遞過來的引數作為指定的編碼
request.setCharacterEncoding("gb2312");

5. 對比
   request.setCharacterEncoding("gb2312");                //設定輸入編碼格式
   response.setContentType("text/html; charset=gb2312");  //設定輸出編碼格式