對UTF 8和GB2312格式 URL進行解碼

2021-06-07 16:48:49 字數 3140 閱讀 7171

對utf-8和gb2312格式 url進行解碼

新的系統編碼格式是:utf-8  

老的頁面編碼格式是: gb2312 

新的系統的url引數(帶中文) 提交到老的系統中,中文引數是亂碼。

解決思路1,在新的系統中傳遞的時候使用js進行解碼,然後再編碼。這種方案,和瀏覽器本身傳參無區別。所以,在使用這種方案後,在老的系統中解碼,依然解決不了問題。

簡單寫一下實現的偽**

傳參的時候,使用js 編碼:

location.href="old.aspx?word="+encodeuri('中文')

老的頁面解碼:

server.urldecode(request["word"]);
最終還是亂碼。

最終看了一下編過的漢字:「中文」

utf-8下:

js編碼過的如下:               %e4%b8%ad%e5%9b%bd

瀏覽器form提交的如下:%e4%b8%ad%e5%9b%bd

gb2312:

js編碼格式如下:              %e4%b8%ad%e5%9b%bd

瀏覽器form提交的如下:%d6%d0%b9%fa

說明,使用js編碼模式都是將字串用utf-8模式下編碼。

如果這樣子的話,那我使用js編碼傳參,後台都採用utf-8進行解碼就可以了。(這種思路未測試,我自己使用的是思路2)

httputility.urldecode(strencode, encoding.utf8); //判斷編碼格式 utf-8

解決思路2,

既然是解碼的問題,那我就要針對傳過來的的字串進行判斷,然後進行相應的格式進行解碼。

(1).判斷其編碼格式。

(2).再解碼。

**如下:

//string strencode =request["word"];  //解碼的時候這樣子獲取引數是有問題的,這樣獲取引數,無論怎麼轉都是亂碼。應用下面的這種方式
string strencode =getword( request.servervariables["query_string"]);
if (isutf8(strencode)) result = httputility.urldecode(strencode, encoding.utf8); //判斷編碼格式 utf-8

else result = httputility.urldecode(strencode, encoding.getencoding("gb2312")); 判斷編碼格式 gb2312

/// /// 獲取word引數

///

///

///

private string getword(string value)

}return strencode;

}/// /// 獲取字元的位元組

///

///

///

private static byte geturlcodingtobytes(string url)

url = url.substring(i + 3);

i = url.indexof('%');

}string urlcoding = sb.tostring();

if (string.isnullorempty(urlcoding))

return new byte[0];

urlcoding = urlcoding.replace("%", string.empty);

int len = urlcoding.length / 2;

byte result = new byte[len];

len *= 2;

for (int index = 0; index < len; index++)

return result;

}/// /// 判斷字元是否為utf-8

///

///

///

private static bool isutf8(string url)

while ((buf[i] & 0x80) != 0);

coctets--;

if (coctets == 0)

return false;}}

else

}if (coctets > 0)

return false;

if (ballascii)

return false;

return true;

}

2012-8-3 16:20 

今天,遇到乙個問題,mvc專案中,乙個ajax請求的問題,又是亂碼。肯定又是編碼的東西,搞的人難受。其實很簡答,乙個文字框,輸入乙個值。ajax請求一下,看是否存在,如果存在就清空。看前任寫的**,

function checkunitname(unitname) , function (data) 

});}

}

public static string unescape(string str)

}catch (formatexception ex)

}#endregion

return outstr;

}

這個方法基本沒派上用場,執行過後,返回為 空字串。

其實就這一句話就搞定了。

public static string unescape(string str)

問題點是:

ajax亂碼問題

從網上查資料得知,

1、xtmlhttp 返回的資料預設的字元編碼是utf-8, 

2、post方法提交資料預設的字元編碼是utf-8, (get也是的,自己就是使用get方式)

因為我這個專案是使用gb2312的編碼格式,ajax(utf-8)

的模式傳到後台,就會出現亂碼了。明白了其中的道理,問題就好解決了。

gb2312和UTF 8的區別

gb2312編碼大約包含6000多漢字 不包括特殊字元 編碼範圍為第一位b0 f7,第二位編碼範圍為a1 fe 第一位為cf時,第二位為a1 d3 計算一下漢字個數為6762個漢字。當然還有其他的字元。包括控制鍵和其他字元大約7573個字元編碼 gbk編碼是對gb2312編碼的擴充,容納的漢字更多,...

GB2312 和 UTF 8的區別

本文 gb2312編碼大約包含6000多漢字 不包括特殊字元 編碼範圍為第一位b0 f7,第二位編碼範圍為a1 fe 第一位為cf時,第二位為a1 d3 計算一下漢字個數為6762個漢字。當然還有其他的字元。包括控制鍵和其他字元大約7573個字元編碼 gbk編碼是對gb2312編碼的擴充,容納的漢字...

GB2312和utf8編碼轉換

經常的寫中文出現亂碼,用編碼器翻譯在粘上去,有的還翻譯不過去。還是用翻譯函式吧 gb2312轉換成utf 8 utf iconv gb2312 utf 8 request keyword 將字串utf 8碼轉換為gb2312碼 str iconv utf 8 gb2312 translit str ...