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

收藏別人寫的不錯的總結

javascriptstrutsjava測試importjspjavascript

最多使用的應爲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
============================================================html

作項目時,明明在 web.xml和struts中進行了字符設置 utf-8,可是 從前臺 js傳過來的參數仍是亂碼問題,在後臺使用request.setCharacterEncoding("UTF-8");仍是不行,上網上查了查原來js也有轉碼的方法,encodeURIComponent() 和 encodeURI(),下面來解決一下問題java

例如 js 代碼爲:web

var text= "關鍵字";瀏覽器

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

傳到後臺的 keyword是亂碼測試

解決方法1:ui

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

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

解決方法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");  //設置輸出編碼格式

相關文章
相關標籤/搜索