解密不同編碼的的引數。

2021-08-22 12:22:36 字數 1673 閱讀 7506

先看下面兩個url,他們傳遞的引數一樣麼??

aaa.aspx?tag=.net%bc%bc%ca%f5

aaa.aspx?tag=.net%e6%8a%80%e6%9c%af

看起來好像是不一樣,其實他們都是對".net技術"進行了urlencode,不過乙個是gb2312的編碼,乙個是utf-8的編碼。

如下**就可以獲得上面的編碼後效果:

string tmp1 = system.web.httputility.urlencode(".net技術", system.text.encoding.getencoding("gb2312"));

string tmp2 = system.web.httputility.urlencode(".net技術", system.text.encoding.utf8);

我們實際的web頁面,可能會被其他程式呼叫。

比如:簡體中文作業系統上的乙個asp頁面,需要向乙個asp.net頁面傳遞乙個帶中文的引數。

預設情況下,簡體中文作業系統上, asp 的 server.urlencode 方法會把中文以gb2312的編碼進行編碼,

但是預設情況下,asp.net的頁面是採用的utf-8編碼。

這種情況下,你在用 request.querystring["tag"] 接受值的時候會接受不到中文資訊,單步除錯看到的是亂碼。

這時候雖然用request.querystring["tag"] 接受的是亂碼,但這時候的url並不是亂碼。

解決方法就是自己分析url中的引數,然後對引數的值按照 gb2312的編碼反解密,而不是用.net 預設的utf-8的編碼反解密。

其實微軟類似的提供了相應的函式,我們不必自己用正規表示式去分析url字串了。

演示**如下:

我們用 lutz roeder's .net reflector 來看 system.web.httputility.parsequerystring 方法的實現:

一直反查進去,我們可以看到最終處理url引數字串分析的**如下:

system.web.httpvaluecollection 類的如下函式實現了對url引數的解析

這裡我們看到,它是自己乙個個字元進行的分析。

internal void fillfromstring(string s, bool urlencoded, encoding encoding)

break;

}num2++;

}string text1 = null;

string text2 = null;

if (num4 >= 0)

else

if (urlencoded)

else

if ((num2 == (num1 - 1)) && (s[num2] == '&'))}}

至於對方傳遞給自己的是哪種編碼方式,最好也一併作為引數傳遞過來,這樣我們就可以根據使用者的這個引數進行解密操作。

解密不同編碼的的引數

先看下面兩個url,他們傳遞的引數一樣麼?aaa.aspx?tag net bc bc ca f5 aaa.aspx?tag net e6 8a 80 e6 9c af 看起來好像是不一樣,其實他們都是對 net技術 進行了urlencode,不過乙個是gb2312的編碼,乙個是utf 8的編碼。如...

留心文字編碼的不同

ruby基礎教程 的第二十二章,有這樣一段示例 意圖刪除讀取的html檔案的頭部和尾部,並儲存在新的txt檔案中。1 htmlfile cathedral.html 2 textfile cathedral.txt 3 4 html file.read htmlfile 5 6 file.open ...

不同字元編碼型別的總結

計算機一開始在美國使用,字元編碼也只包括英文本母。anscii編碼由乙個位元組表示所有符號。乙個位元組可以表示的所有可能是256 2的8次方 種,對於美國人來說,26個英文本母,加上常用的符號,也只是用了127個。如果大家都用英文,那這套編碼完全夠用。但是不同國家的文字不同,如果加上其他國家的語言符...