最近在做一个程序时遇到.net页面和asp页面互相访问的情况,.net页面默认的编友格式都是utf-8的,而asp页面中全部都用的是ANSI(GB2312),在.net页面中点击指向asp页面的链接时,由于编码问题,在传递的参数中的汉字,在asp页面中无法读取。最后找到这段代码搞定,把这段代码嵌入每一个要接受汉字参数的asp页面中即可。
<%
if(Request.ServerVariables("QUERY_STRING")<>"" and InStr(Request.ServerVariables("QUERY_STRING"),"=%")<>0) then
'对参数进行utf-8到gb2312的转码
Url="http://"&Request.ServerVariables("SERVER_NAME")&Request.ServerVariables("Path_info")&"?"&UTF2GB(Request.ServerVariables("QUERY_STRING"))
'将转码后得到的url进行重定向,这样参数的编码即为gb2312,可以和oa中的程序良好的交互
response.redirect Url
end if
if(Request.ServerVariables("QUERY_STRING")<>"" and InStr(Request.ServerVariables("QUERY_STRING"),"=%")<>0) then
'对参数进行utf-8到gb2312的转码
Url="http://"&Request.ServerVariables("SERVER_NAME")&Request.ServerVariables("Path_info")&"?"&UTF2GB(Request.ServerVariables("QUERY_STRING"))
'将转码后得到的url进行重定向,这样参数的编码即为gb2312,可以和oa中的程序良好的交互
response.redirect Url
end if
%>
<%
' 汉字转换为UTF-8
function chinese2unicode(Str)
dim i
dim Str_one
dim Str_unicode
for i = 1 to len(Str)
Str_one = Mid(Str,i, 1 )
Str_unicode = Str_unicode & chr( 38 )
Str_unicode = Str_unicode & chr( 35 )
Str_unicode = Str_unicode & chr( 120 )
Str_unicode = Str_unicode & Hex(ascw(Str_one))
Str_unicode = Str_unicode & chr( 59 )
next
chinese2unicode = Str_unicode
end function
' UTF-8 To GB2312
function UTF2GB(UTFStr)
for Dig = 1 to len(UTFStr)
if mid(UTFStr,Dig, 1 ) = " % " then
' 若为空格,则仅对空格作处理(3位)
if mid(UTFStr,Dig, 3 ) = " %20 " then
GBStr = GBStr & ConvChinese(mid(UTFStr,Dig, 3 ))
Dig = Dig + 2
' 若不为空格,而且剩余的utf-8字符串长度大于或等于8,则取汉字(9位)
elseif len(UTFStr) >= Dig + 8 then
GBStr = GBStr & ConvChinese(mid(UTFStr,Dig, 9 ))
Dig = Dig + 8
' 剩余字符串既不为空格,也不为汉字,则直接处理,取其原值
else
GBStr = GBStr & mid(UTFStr,Dig, 1 )
end if
else
' 若当前字符串不是以%开始的,则取其原值
GBStr = GBStr & mid(UTFStr,Dig, 1 )
end if
next
UTF2GB = GBStr
end function
function ConvChinese(x)
A = split(mid(x, 2 ), " % " )
i = 0
j = 0
for i = 0 to ubound(A)
A(i) = c16to2(A(i))
next
for i = 0 to ubound(A) - 1
DigS = instr(A(i), " 0 " )
Unicode = ""
for j = 1 to DigS - 1
if j = 1 then
A(i) = right(A(i),len(A(i)) - DigS)
Unicode = Unicode & A(i)
else
i = i + 1
A(i) = right(A(i),len(A(i)) - 2 )
Unicode = Unicode & A(i)
end if
next
if len(c2to16(Unicode)) = 4 then
ConvChinese = ConvChinese & chrw( int ( " &H " & c2to16(Unicode)))
else
' response.write "a"&Unicode&"a"
' response.write len(c2to16(Unicode))
' response.end
ConvChinese = ConvChinese & chr( int ( " &H " & c2to16(Unicode)))
end if
next
end function
function c2to16(x)
i = 1
for i = 1 to len(x) step 4
c2to16 = c2to16 & hex(c2to10(mid(x,i, 4 )))
next
end function
function c2to10(x)
c2to10 = 0
if x = " 0 " then exit function
i = 0
for i = 0 to len(x) - 1
if mid(x,len(x) - i, 1 ) = " 1 " then c2to10 = c2to10 + 2 ^ (i)
next
end function
function c16to2(x)
i = 0
for i = 1 to len(trim(x))
tempstr = c10to2(cint( int ( " &h " & mid(x,i, 1 ))))
do while len(tempstr) < 4
tempstr = " 0 " & tempstr
loop
c16to2 = c16to2 & tempstr
next
end function
function c10to2(x)
mysign = sgn(x)
x = abs(x)
DigS = 1
do
if x < 2 ^ DigS then
exit do
else
DigS = DigS + 1
end if
loop
tempnum = x
i = 0
for i = DigS to 1 step - 1
if tempnum >= 2 ^ (i - 1 ) then
tempnum = tempnum - 2 ^ (i - 1 )
c10to2 = c10to2 & " 1 "
else
c10to2 = c10to2 & " 0 "
end if
next
if mysign =- 1 then c10to2 = " - " & c10to2
end function
%>