url帶中文引數顯示亂碼的問題

2021-04-15 17:02:47 字數 2491 閱讀 1987

最近要上個專案,其實很簡單的東西,就是拼接乙個url,不過url中的引數需要urlencode編碼的,其實對我來說,這個問題很好解決,c#用httputility.urlencode來進行編碼,asp用server.urlencode來進行編碼。

問題解決了嗎?問題剛剛開始

因為這個公用轉向檔案,是針對所有分站的,分站**有.net和asp兩種,檔案編碼格式也不一樣。

頭大的事情開始了。asp站的檔案編碼是gb2312,雖然.net的檔案格式也是gb2312,但因為webconfig裡設定的requestencoding是utf8的,所以在接收中文的時候,無論你urldecode怎麼解碼,哪怕你指定用gb2312解碼,出來的還是亂碼,那這時候你會說改下webconfig檔案呀,不錯!如果是你自己的小專案,這樣的改動或許不算什麼,可如果牽涉到很多專案,在你沒辦法改的情況下怎麼辦呢????

先看看例子吧:

環境:asp:檔名:test.asp 檔案編碼:gb2312

.net:檔名:test.aspx,test.aspx.cs 檔案編碼:gb2312

.net:檔名:go.aspx, go.aspx.cs檔案編碼:gb2312

test.asp **:

<

%str 

=server.urlencode(

"中文測試")

"中文測試");

其實在go.aspx.cs中,大家以為編碼定到gb2312,應該會正常了,其實錯了,我跟蹤了一下,在request["name"]的時候,已經解碼,解碼的是按照webconfig設定的,那就是utf8。

ok,.net中,可以指定編碼進行url編碼,test.aspx.cs可以變成:httputility.urlencode("中文測試", encoding.getencoding("utf-8")) 這樣go.aspx接收後會完全轉換的。

可asp的server.urlencode是沒有這個引數的,怎麼辦呢?

2個辦法:

1、把test.asp儲存為utf-8編碼

2、就是我自己想的乙個不是辦法的辦法。

因為前面說了,我牽涉的專案都是無法更改編碼的,如果更改對**的牽涉太大,所以只能另外想辦法。

在做了大量測試後,我發現urlencode轉碼後成為%ab%cd格式,大家都知道urlencode在轉碼英文的時候,會原封不動的還給你,比如你傳a,接收方接收的也是a,%會轉換成%25,urldecode解碼的時候%25無論你什麼編碼,都會解碼成%

好,有思路了,假設「中文測試」編碼為%ab%cd%ef%gh

str 

=server.urlencode(

"中文測試") 

'%ab%cd%ef%gh

str1 

=server.urlencode(server.urlencode(

"中文測試

")) 

'%25ab%25cd%25ef%25gh

我們再改下go.aspx.cs

看下go.aspx頁面顯示:

第一條會顯示亂碼

第二條會顯示:中文測試

這是什麼原因呢?因為在request的時候,因為webconfig的關係,事先已經按照utf8來進行解碼了,所以你再用指定格式解碼已經無濟於事了。

第二個為什麼可以呢?因為我2次編碼了,所以request的時候,會事先解碼成:%ab%cd%ef%gh

所以我在用urldecode來進行解碼,ok!任務完成。

雖然我這個問題不是什麼大問題,但有時候真的會讓你感到頭疼,為了這個問題,花了我3個小時,網上也沒有任何解答,所以寫下來,希望對大家有所幫助 

url帶中文引數顯示亂碼的問題

最近要上個專案,其實很簡單的東西,就是拼接乙個url,不過url中的引數需要urlencode編碼的,其實對我來說,這個問題很好解決,c 用httputility.urlencode來進行編碼,asp用server.urlencode來進行編碼。問題解決了嗎?問題剛剛開始 因為這個公用轉向檔案,是針...

帶中文的url的亂碼問題

渣渣糾結了一下午的問題,男朋友看了兩眼截圖就給我解決了,哭死。記錄一下。兩個jsp頁面的跳轉,需要傳中文引數,但是出現了亂碼。在拼接url時,應該首先將中文字串使用encodeuri編碼一下,即encodeuri filename 不能將整個url編碼,因為 也會被編碼。我的目的是使用如下 進行pd...

URL傳遞中文引數亂碼問題

今天使用jquery傳送post請求時,傳遞的引數是中文的,接收是發現引數亂碼了!開始以為是頁面編碼問題,刪除檔案 新建,還有有此問題。後來在除錯中發現頁面獲取引數時正常,就是傳遞後獲取亂碼了,應該就是傳遞出錯了。網上搜了下,解決方法如下 1.頁面傳遞時 js傳遞 進行編碼設定 var userna...