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"); //設定輸出編碼格式