IIS7下的ASP页面,改为Utf-8编码后,Html部分的中文显示正常,但是由 Response.Write 输出的中文字符,在不特定的时间会变成乱码,一开始以为是浏览器问题,测试了多个浏览器故障依旧不定时出现:
<%@ language="VBScript" CODEPAGE="65001" %>
<% Option Explicit %>
<%
Response.Charset="UTF-8"
%>
必须关闭浏览器重新打开网站才会恢复正常。
后来想起 Nosql.asp 文件内的提示文字未使用中文,全部使用的是 &#数字; 这样的 UNiCode 形式来表示中文字符。受此启发,于是有了以下函数,改装 Response.Write ,自动检测是否有Ascii值大于255的字符,有的话,则全部转换为&#;形式再输出:
Public Function zh2html(s)
Dim i, r, c, t
For i = 1 To Len(s)
t = Mid(s, i, 1)
c = AscW(t)
If c < 0 Then c = c + 65536
If c > 255 Then
r = r & "&#" & c & ";"
Else
r = r & t
End If
Next
zh2html = r
End Function
sub RW(s):Response.Write zh2html(s):end sub
从此再也没有出现过乱码了。
‘--------------------20241115
今天处理一个不得不用中文的 URI 再次出现乱码问题,可以肯定的是 ASP 处理 UTF-8 编码的中文时灵时不灵的,无解,因此,同样要避免传入参数使用 % 开头的这种 UTF-8 编码形式的中文,ASP 处理不灵光,第一次打开可以,但是一刷新就乱码。
也就是说,Ajax 传过来的参数用 encodeURI
和 encodeURIComponent 编码中文是没用的,因为 ASP 遇到
%E4%B8%AD%E6%96%87 就会时灵时不灵的,因此只能回到被淘汰的
escape ,这个处理中文参数传递到 ASP 就不会出问题了,只是需要一个 VBS 的 unescape 见:
日志:中文 URI 参数乱码之 encodeURI、encodeURIComponent、escape 作为 Ajax 中文参数编码给 ASP 的记录-CSDN博客
处理后的中文 URI :
fo.asp?site=DJZ&sname=%u6C5F
这样再也不会出现输入乱码了。
下面补充一下解码 Unicode 编码中文的函数:
'解码 zh2html 结果
public Function asctow(s)
Dim p, w, a, i
w = s
If (InStr(s, "&#") > 0) Then
p = Split(s, "&#")
w = ""
For i = 0 To UBound(p)
If (InStr(p(i), ";") > 0) Then
a = Split(p(i), ";")
a(0) = Replace(a(0), ";", "")
w = w + (ChrW(a(0)) + a(1))
Else
w = w + p(i)
End If
Next
End If
asctow = w
End Function