最近在做一个程序时遇到.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

%>
<%
'
汉字转换为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
%>
本文介绍了解决.NET页面和ASP页面之间的编码问题的方法。通过使用特定的VBScript代码,实现了从UTF-8到GB2312的编码转换,确保了跨页面传递的汉字参数能够被正确解析。
2708

被折叠的 条评论
为什么被折叠?



