ASP页面改为UTF-8编码后,刷新页面中文输入输出不定时乱码终极解决方案

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

jessezappy

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值