呼叫encodeURI來解決亂碼問題的原因

2021-07-24 03:49:08 字數 807 閱讀 7913

encodeurl函式主要是來對uri來做轉碼,它預設是採用的utf-8的編碼.

utf-8編碼的格式:乙個漢字來三個位元組構成,每乙個位元組會轉換成16進製制的編碼,同時新增上%號.

假設頁面端輸入的中文是乙個「中」,按照下面步驟進行解碼

1、第一次encodeuri,按照utf

-8方式獲取位元組陣列變成[-28,-72-83],對位元組碼陣列進行遍歷,把每個位元組轉化成對應的16進製制數,這樣就變成了[e4,b8,ad],最後變成[%e4,%b8,%ad]  此時已經沒有了多位元組字元,全部是單位元組字元。

2、第二次encodeuri,進行編碼,會把%看成乙個轉義字元,並不編碼%以後字元,會把%編碼成%25.把陣列最後變成[%25e4,%25b8,%25ad]然後就把處理後的資料[%25e4,%25b8,%25ad]發往伺服器端,

當應用伺服器呼叫getparameter方法,getparameter方法會去向應用伺服器請求引數

應用伺服器最初獲得的就是傳送來的[%25e4,%25b8,%25ad],應用伺服器會對這個資料進行urldecode操作,應用伺服器進行解碼的這一次,不管是按照utf-8,還是gbk,還是iso-8859,,都能得到[%e4,%b8,%ad],因為都會把%25解析成%.並把這個值返回給getparameter方法

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

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

encodeURI來解決URL傳遞時的中文問題

在ajax瀏覽器來進行傳送資料時,一般它所預設的都是utf 8的編碼.使用jquery中所提供的方法來做操作 encodeuri function verify 說明 1 encodeurl函式主要是來對uri來做轉碼,它預設是採用的utf 8的編碼.2.utf 8編碼的格式 乙個漢字來三個位元組構...

Ubuntu Rhythmbox 解決中文亂碼

在這裡介紹的是乙個解決方法,修改變數。在終端輸入 gedit profile 在最後加入下面內容 exportgst id3 tag encoding gbk utf 8 gb18030 exportgst id3v2 tag encoding gbk utf 8 gb18030 儲存退出。sour...

解決 Flask sqlalchemy 中文亂碼

當在使用 flask sqlalchemy 操作 mysql 資料庫時中文亂碼或者直接報錯。解決方法如下 from flask sqlalchemy import sqlalchemy db sqlalchemy use native unicode utf8 配置 mysql 預設字元編碼為 ut...