前陣子遇到了這個問題
要使用vbscript丟中文參數給.aspx的頁面,
以抓取處理完頁面內的資料

基本上如果直接在vbcript內使用自製的URLENCODE
或是在asp內使用URLENCODE,丟給.net的頁面是無法正確解碼
原因就在於,vbscript及asp是使用預設語系的URLENCODE,我們這邊也就是Big5碼
但 asp.net開發環境所預設的是UTF-8,所以就導致ENCODE的字碼不相符

在這邊我的解決方法就是:

首先在vbscript內使用自製的URLENCODE:
'*******************************************
'自製URLENCODE
Function URLEncode(strEnc)
Dim strChr, intAsc, strTmp, strTmp2, strRet, lngLoop
For lngLoop = 1 To Len(strEnc)
strChr = Mid(strEnc, lngLoop, 1)
intAsc = Asc(strChr)
If ((intAsc < 58) And (intAsc > 47)) Or ((intAsc < 91) And _
(intAsc > 64)) Or ((intAsc < 123) And (intAsc > 96)) Then
strRet = strRet & strChr
ElseIf intAsc = 32 Then
strRet = strRet & "+"
Else
strTmp = Hex(Asc(strChr))
strRet = strRet & "%" & Right("00" & Left(strTmp, 2), 2)
strTmp2 = Mid(strTmp, 3, 2)
If Len(strTmp) > 3 Then
If IsNumeric(Mid(strTmp, 3, 1)) Then
strRet = strRet & Chr(CInt("&H" & strTmp2))
Else
strRet = strRet & "%" & strTmp2
End If
End If
End If
Next
URLEncode = strRet
End Function
'***********************************
(資料來源: 藍色小舖)

將中文參數ENCODE後再傳出

傳出後,在asp.net這端接收時,必須使用Big5的decode才可以正確接收

以下是代碼:
//************************************************
//接url參數(用big5接)
//從vbscript過來的要強制轉成big5接,否則ASP預設用UTF8接
string add = HttpUtility.UrlDecode(this.Request.Url.Query.Replace("?Add=", ""), Encoding.GetEncoding("big5"));
//轉UTF8
byte[] addbyte = Encoding.GetEncoding("big5").GetBytes(add);
byte[] utf8byte = Encoding.Convert(Encoding.GetEncoding("big5"), Encoding.UTF8, addbyte);
add = Encoding.UTF8.GetString(utf8byte);
//************************************************
至於為何使用this.Request.Url.Query.Replace("?Add=", "")
是因為如果直接用Request.QueryString的話,在抓進來的時候asp.net就會很雞婆的先幫你decode了...
所以才直接抓query原始的值,會長這樣 ?Add=XXXXXXXX
如果多個參數的話就要一個一個解析囉...

以上是我的解決方法,不知道有沒有更好的辦法囉~
arrow
arrow
    全站熱搜

    pikachumk2 發表在 痞客邦 留言(0) 人氣()