1. 程式人生 > >中文亂碼 encodeURI來解決URL傳遞時的中文

中文亂碼 encodeURI來解決URL傳遞時的中文

解決中文亂麻問題,頁面端發出的資料作兩次encodeURI

var name="張三";

encodeURI(encodeURI(name));

後臺解碼:

 URLDecoder.decode(name,"UTF-8");

------------------------------------------------------------------------------------------------------------------

URL編碼與兩次encodeURI

當使用位址列提交查詢引數時,如果不編碼,非英文字元會按照作業系統的字符集進行編碼提交到伺服器,伺服器會按照配置的字符集進行解碼,所以如果兩者不一致就會導致亂碼。

encodeURI函式採用UTF-8對URL進行編碼,所以如果伺服器在進行解碼時使用的是其他的編碼方式就會出現亂碼,預設的伺服器配置的解碼字符集都不是UTF-8,所以大部分情況下位址列提交中文查詢引數時會產生亂碼;針對這種情況,可以連續使用兩次encodeURI在客戶端(主要指瀏覽器)對非英文字元進行編碼,然後在服務端使用java.net.URLDecoder(String."UTF-8")解碼,即可得到正確的中文。

如果只進行一次encodeURI,得到的是UTF-8形式的URL,伺服器端通過request.getParameter()解碼查詢引數(通常是iso-8859-1)就會得到亂碼。

如果進行兩次encodeURI,第一次編碼得到的是UTF-8形式的URL,第二次編碼得到的依然是UTF-8形式的URL,但是在效果上相當於首先進行了一次UTF-8編碼(此時已經全部轉換為ASCII字元),再進行了一次iso-8859-1編碼,因為對英文字元來說UTF-8編碼和ISO-8859-1編碼的效果相同。在伺服器端,首先通過request.getParameter()自動進行第一次解碼(可能是gb2312,gbk,utf-8,iso-8859-1等字符集,對結果無影響)得到ascii字元,然後再使用UTF-8進行第二次解碼,通常使用java.net.URLDecoder("","UTF-8")方法。

兩次編碼兩次解碼的過程為:

UTF-8編碼->UTF-8(iso-8859-1)編碼->iso-8859-1解碼->UTF-8解碼,編碼和解碼的過程是對稱的,所以不會出現亂碼。

encodeURL函式主要是來對URI來做轉碼,它預設是採用的UTF-8的編碼.
. UTF-8編碼的格式:一個漢字來三個位元組構成,每一個位元組會轉換成16進位制的編碼,同時新增上%號.

假設頁面端輸入的中文是一個“中”,按照下面步驟進行解碼

1.第一次encodeURI,按照utf-8方式獲取位元組陣列變成[-28,-72-83],對位元組碼陣列進行遍歷,把每個位元組轉化成對應的16進位制數,這樣就變成了[E4,B8,AD],最後變成[�,�,�]  此時已經沒有了多位元組字元,全部是單位元組字元。

2、第二次encodeURI,進行編碼,會把%看成一個轉義字元,並不編碼%以後字元,會把%編碼成%.把陣列最後變成[�,�,�]然後就把處理後的資料[�,�,�]發往伺服器端,
當應用伺服器呼叫getParameter方法,getParameter方法會去向應用伺服器請求引數
應用伺服器最初獲得的就是傳送來的[�,�,�],應用伺服器會對這個資料進行URLdecode操作,應用伺服器進行解碼的這一次,不管是按照UTF-8,還是GBK,還是ISO-8859,,都能得到[�,�,�],因為都會把%解析成%.並把這個值返回給getParameter方法

3、再用UTF-8解碼一次,就得到"中"了。

想想看,如果不編碼兩次,當伺服器自動解碼的時候,假如是按照ISO-8859去解碼UTF-8編碼的東西,就是會出現亂碼。

相關推薦

中文亂碼 encodeURI解決URL傳遞中文問題

影響 文字 ring class detail pla 解碼 http 效果 解決中文亂麻問題,頁面端發出的數據作兩次encodeURI var name="張三"; encodeURI(encodeURI(name)); 後臺解碼: URLDecoder.dec

中文亂碼 encodeURI解決URL傳遞中文

解決中文亂麻問題,頁面端發出的資料作兩次encodeURI var name="張三"; encodeURI(encodeURI(name)); 後臺解碼:  URLDecoder.decode(name,"UTF-8"); ----------------

encodeURI解決URL傳遞中文問題

encodeURI function verify() { //解決中文亂麻問題的方法1,頁面端發出的資料作一次encodeURI, 伺服器段使用進行轉移成UTF-8; //解決中文亂麻問題的方法2,頁面端發出的資料作兩次encodeURI, 這個做的好處在於,不管瀏

encodeURI解決URL傳遞為什麼需要進行兩次encodeURI編碼

說明:1 .encodeURL函式主要是來對URI來做轉碼,它預設是採用的UTF-8的編碼.         2. UTF-8編碼的格式:一個漢字來三個位元組構成,每一個位元組會轉換成16進位制的編碼,同時新增上%號.  下面先看一段前端程式碼: /** *初始化d

Spring mvc解決url傳遞中文引數亂碼問題

在tomcat伺服器中,修改server.xml引數, 如<Connector URIEncoding="UTF-8" connectionTimeout="20000" port="8080"

Javascript與ASP.NET(一般處理程式)關於URL(get方式)傳遞中文亂碼問題的解決方案

一、首先,說一下我要實現的功能 根據老師ID、學年、學期,查詢該教師教授的課程資訊。 二、傳遞引數我遇到的問題:     我通過傳遞教師ID、學年和學期從資料庫查詢出該教師所教的課程資訊,展現在介面上,從資料庫我能查詢出資料,為什麼在介面不出資料呢,我斷點除錯,發現這

為什麽要兩次調用encodeURI解決亂碼問題

d+ 方法 coder gbk 輸入 轉化 自動 gpo 轉換 .encodeURL函數主要是來對URI來做轉碼,它默認是采用的UTF-8的編碼.. UTF-8編碼的格式:一個漢字來三個字節構成,每一個字節會轉換成16進制的編碼,同時添加上%號. 假設頁面端輸入的中文是一個

SpringMVC學習系列-後記 解決GET請求中文亂碼的問題

之前專案中的web.xml中的編碼設定: <filter> <filter-name>CharacterEncoding</filter-name> <filter-class>org.springframework.w

JSP頁面提交資料中文亂碼問題的解決

JSP頁面提交含中文的資料時,如果是POST方式提交資料,在request.getParameter("valueName");前面加上 request.setCharacterEncoding("UTF-8"); 便可解決中文資料裡面的問題。如果是GET方式或位址列方式提交

jsp中EL表示式顯示中文亂碼和過濾器解決請求中文亂碼

一,jsp中EL表示式顯示時中文亂碼    我是通過url請求將一個jsp的值傳到另一個jsp,結果在另一個jsp顯示時出現中文亂碼。    分析問題:由於URL請求沒有設定編碼格式所以解析響應時會出現中文亂碼    解決方法:在Tomcat的conf資料夾中的server.

eclipse插入資料到MySQL資料庫,出現中文亂碼問題的解決方法

       中文亂碼 問題,一直讓人很煩,在百度上找了很多方法,都不行,後來,忽然想到一個方法,竟然沒有亂碼了,好了,進入正題;        首先,說明我的中文亂碼是出現在配置hibernate

通過freemarker生成一個word,解決生成的word用wps開啟有問題的問題,解決出word中文檔名亂碼問題,解決打開出word開啟的word出現問題的問題,出圖片,解決動態列表

通過freemarker製作word比較簡單步驟:製作word模板。製作方式是:將模板word儲存成為xml----在xml的word模板中新增相應的標記----將xml的word檔案的字尾名改成f

SpringMVC 解決GET請求中文亂碼的問題

專案中的web.xml中的編碼設定: <filter> <filter-name>CharacterEncoding</filter-name> <filter-class>org.spr

URL地址中的中文亂碼問題的解決

引言: 在Restful類的服務設計中,經常會碰到需要在URL地址中使用中文作為的引數的情況,這種情況下,一般都需要正確的設定和編碼中文字元資訊。亂碼問題就此產生了,該如何解決呢?且聽本文詳細道來。 1.  問題的引出    在Restful的服務設計中,查詢某些資訊的時候

MySQL 在控制檯插入資料,中文亂碼問題的解決

當向 MySQL 資料庫插入一條帶有中文的資料形如  insert into employee values(null,'張三','female','1995-10-08','2015-11-12','Sales',2000,'是個好員工!');  出現亂碼時,可以使用語句

解決Highcharts匯出中文亂碼

場景:asp.net中使用Highcharts圖表,使用Tek4.Highcharts.Exporting匯出服務。 問題:使用Highcharts匯出圖片,圖片上的中文全是亂碼。 分析:出現亂碼100%是編碼的問題。 解決方案: Tek4.Highcharts.Expor

2017.6.17 jsp中 get請求的中文亂碼問題的解決方法

utf meta class enc 請求 服務 charset url編碼 uri 一般Tocant 的url編碼是iso-8859-1(查看tocat/conf/server.xml 中的Connector 節點沒有寫URIEncoding="xxxxxx") 如下:

codeblocks中文亂碼原因及解決辦法

文字 win 編輯器 odin bsp block set lang -c 原因:(本地化做得不夠好)默認情況下codeblocks編輯器保存源文件是保存為windows本地編碼,就是WINDOWS-936字符集,即GBK;但CB的編輯器在默認編輯的時候是按照UTF-8來解

vim、gvim在windows下中文亂碼的終極解決方式

位置 nor sni nes n-1 message gui lan 終極 測試成功,完美解決。 僅僅需改動VIM文件夾以下的這個文件_vimrc。 加油吧,騷年。非常強大的! set encoding=utf-8 set fileencodings=ut

plsql中文亂碼問題方案解決

nbsp user select 是否 需要 屬性 use span eric 1、查看服務器端編碼 a.select userenv(‘language’) from dual; b.我實際查到的結果為:AMERICAN_AMERICA.ZHS16GBK 2、執行