asp 页面中gb2312页面接受utf-8编码字符的变量,字符编码转化时出错,中文字数是偶数的话就不会少,奇数的话就会少

时间:2023-01-05 22:13:15
路过的兄弟姐妹,大哥大姐,热心的高手们请帮小弟一个忙,不胜感激。
我用以下的一个函数 来解决gb2312页面接受utf-8编码字符的变量编码出错问题,结果是中文字数是偶数的话就不会少,奇数的话就会少一个:在Function.asp里面有这么一段代码
Function utf2gb(Body)
if isUtf8(Body) then
Dim Objstream
Set Objstream = Server.CreateObject("adodb.stream")
objstream.Charset = "gb2312"
objstream.Type = 2
objstream.Mode =3
objstream.Open
objstream.WriteText body
objstream.Position = 0
objstream.Charset = "utf-8"
objstream.Type = 2
utf2gb = objstream.ReadText
objstream.Close
set objstream = nothing
else
utf2gb = Body
end if
End Function


Function URLEncoding(vstrIn)
strReturn = ""
For i = 1 To Len(vstrIn)
ThisChr = Mid(vStrIn,i,1)
If Abs(Asc(ThisChr)) < &HFF Then
strReturn = strReturn & ThisChr
Else
innerCode = Asc(ThisChr)
If innerCode < 0 Then
innerCode = innerCode + &H10000
End If
Hight8 = (innerCode And &HFF00)/ &HFF
Low8 = innerCode And &HFF
strReturn = strReturn & "%" & Hex(Hight8) & "%" & Hex(Low8)
End If
Next
URLEncoding = strReturn
End Function

Function URLDecode(enStr)
dim deStr
dim c,i,v
deStr=""
for i=1 to len(enStr)
c=Mid(enStr,i,1)
if c="%" then
v=eval("&h"+Mid(enStr,i+1,2))
if v<128 then
deStr=deStr&chr(v)
i=i+2
else
if isvalidhex(mid(enstr,i,3)) then
if isvalidhex(mid(enstr,i+3,3)) then
v=eval("&h"+Mid(enStr,i+1,2)+Mid(enStr,i+4,2))
deStr=deStr&chr(v)
i=i+5
else
v=eval("&h"+Mid(enStr,i+1,2)+cstr(hex(asc(Mid(enStr,i+3,1)))))
deStr=deStr&chr(v)
i=i+3
end if
else
destr=destr&c
end if
end if
else
if c="+" then
deStr=deStr&" "
else
deStr=deStr&c
end if
end if
next
URLDecode=deStr
end function

function isvalidhex(str)
isvalidhex=true
str=ucase(str)
if len(str)<>4 then isvalidhex=false:exit function
if left(str,1)<>"%" then isvalidhex=false:exit function
c=mid(str,3,1)
if not (((c>="0") and (c<="9")) or ((c>="A") and (c<="Z"))) then isvalidhex=false:exit function
c=mid(str,4,1)
if not (((c>="0") and (c<="9")) or ((c>="A") and (c<="Z"))) then isvalidhex=false:exit function
end function

function isUtf8(nsstr)
dim iuRs,iuSql
set iuRs= Server.CreateObject("ADODB.Recordset")
iuSql="select bigclassname from bigclass"
iuRs.open iuSql,conn,1,1
do while not iuRs.eof
        if URLEncoding(iuRs("bigclassname"))=URLEncoding(nsstr) then
        isUtf8=false
        exit do
        else
        isUtf8=true
        end if
iuRs.movenext
loop                    
iuRs.close
end function

在product.asp页面(接收参数的页面)有这样一段代码 BigClassName =utf2gb(BigClassName) 请问该怎么办才不会 字数是奇数的时候也不会少一个字。函数的主要 把所有的 bigclassname 都转成 unicode 跟 传来的参数比较 不相同的就 用utf2gb转。
路过的兄弟姐妹,大哥大姐,热心的高手们请帮小弟一个忙,不胜感激。