紫影基地

 找回密码
 立即注册
查看: 128|回复: 0

[ASP] Asp中有关字符编码转换的几个函数

[复制链接]
阅读字号:

2002

主题

2117

帖子

21万

积分

超级版主

Rank: 8Rank: 8

积分
210303
发表于 2024-4-21 17:22:17 | 显示全部楼层 |阅读模式
  1. <%
  2. 1、'UTF转GB---将UTF8编码文字转换为GB编码文字
  3. function UTF2GB(UTFStr)

  4. for Dig=1 to len(UTFStr)
  5.   '如果UTF8编码文字以%开头则进行转换
  6.   if mid(UTFStr,Dig,1)="%" then
  7.      'UTF8编码文字大于8则转换为汉字
  8.     if len(UTFStr) >= Dig+8 then
  9.        GBStr=GBStr & ConvChinese(mid(UTFStr,Dig,9))
  10.        Dig=Dig+8
  11.     else
  12.       GBStr=GBStr & mid(UTFStr,Dig,1)
  13.     end if
  14.   else
  15.      GBStr=GBStr & mid(UTFStr,Dig,1)
  16.   end if
  17. next
  18. UTF2GB=GBStr
  19. end function

  20. 'UTF8编码文字将转换为汉字
  21. function ConvChinese(x)
  22.    A=split(mid(x,2),"%")
  23.    i=0
  24.    j=0
  25.   for i=0 to ubound(A)
  26.      A(i)=c16to2(A(i))
  27.   next
  28.   for i=0 to ubound(A)-1
  29.     DigS=instr(A(i),"0")
  30.     Unicode=""
  31.     for j=1 to DigS-1
  32.       if j=1 then
  33.         A(i)=right(A(i),len(A(i))-DigS)
  34.         Unicode=Unicode & A(i)
  35.       else
  36.          i=i+1
  37.          A(i)=right(A(i),len(A(i))-2)
  38.          Unicode=Unicode & A(i)
  39.       end if
  40.     next

  41.     if len(c2to16(Unicode))=4 then
  42.        ConvChinese=ConvChinese & chrw(int("&H" & c2to16(Unicode)))
  43.     else
  44.        ConvChinese=ConvChinese & chr(int("&H" & c2to16(Unicode)))
  45.     end if
  46.   next
  47. end function

  48. '二进制代码转换为十六进制代码
  49. function c2to16(x)
  50.    i=1
  51.    for i=1 to len(x) step 4
  52.       c2to16=c2to16 & hex(c2to10(mid(x,i,4)))
  53.    next
  54. end function

  55. '二进制代码转换为十进制代码
  56. function c2to10(x)
  57.    c2to10=0
  58.    if x="0" then exit function
  59.      i=0
  60.    for i= 0 to len(x) -1
  61.       if mid(x,len(x)-i,1)="1" then c2to10=c2to10+2^(i)
  62.    next
  63. end function

  64. '十六进制代码转换为二进制代码
  65. function c16to2(x)
  66.     i=0
  67.     for i=1 to len(trim(x))
  68.       tempstr= c10to2(cint(int("&h" & mid(x,i,1))))
  69.       do while len(tempstr)<4
  70.          tempstr="0" & tempstr
  71.       loop
  72.       c16to2=c16to2 & tempstr
  73.    next
  74. end function

  75. '十进制代码转换为二进制代码
  76. function c10to2(x)
  77.    mysign=sgn(x)
  78.    x=abs(x)
  79.    DigS=1
  80.    do
  81.       if x<2^DigS then
  82.         exit do
  83.       else
  84.         DigS=DigS+1
  85.       end if
  86.    loop
  87.    tempnum=x

  88.    i=0
  89.    for i=DigS to 1 step-1
  90.       if tempnum>=2^(i-1) then
  91.          tempnum=tempnum-2^(i-1)
  92.          c10to2=c10to2 & "1"
  93.       else
  94.          c10to2=c10to2 & "0"
  95.       end if
  96.    next
  97.    if mysign=-1 then c10to2="-" & c10to2
  98. end function

  99. 2、'GB转UTF8--将GB编码文字转换为UTF8编码文字

  100. Function toUTF8(szInput)
  101.     Dim wch, uch, szRet
  102.     Dim x
  103.     Dim nAsc, nAsc2, nAsc3
  104.     '如果输入参数为空,则退出函数
  105.     If szInput = "" Then
  106.         toUTF8 = szInput
  107.         Exit Function
  108.     End If
  109.     '开始转换
  110.      For x = 1 To Len(szInput)
  111.         '利用mid函数分拆GB编码文字
  112.         wch = Mid(szInput, x, 1)
  113.         '利用ascW函数返回每一个GB编码文字的Unicode字符代码
  114.         '注:asc函数返回的是ANSI 字符代码,注意区别
  115.         nAsc = AscW(wch)
  116.         If nAsc < 0 Then nAsc = nAsc + 65536
  117.    
  118.         If (nAsc And &HFF80) = 0 Then
  119.             szRet = szRet & wch
  120.         Else
  121.             If (nAsc And &HF000) = 0 Then
  122.                 uch = "%" & Hex(((nAsc / 2 ^ 6)) Or &HC0) & Hex(nAsc And &H3F Or &H80)
  123.                 szRet = szRet & uch
  124.             Else
  125.                'GB编码文字的Unicode字符代码在0800 - FFFF之间采用三字节模版
  126.                 uch = "%" & Hex((nAsc / 2 ^ 12) Or &HE0) & "%" & _
  127.                             Hex((nAsc / 2 ^ 6) And &H3F Or &H80) & "%" & _
  128.                             Hex(nAsc And &H3F Or &H80)
  129.                 szRet = szRet & uch
  130.             End If
  131.         End If
  132.     Next
  133.       
  134.     toUTF8 = szRet
  135. End Function

  136. 3、'GB转unicode---将GB编码文字转换为unicode编码文字

  137. function chinese2unicode(Str)
  138.   dim i
  139.   dim Str_one
  140.   dim Str_unicode
  141.   if(isnull(Str)) then
  142.      exit function
  143.   end if
  144.   for i=1 to len(Str)
  145.     Str_one=Mid(Str,i,1)
  146.     Str_unicode=Str_unicode&chr(38)
  147.     Str_unicode=Str_unicode&chr(35)
  148.     Str_unicode=Str_unicode&chr(120)
  149.     Str_unicode=Str_unicode& Hex(ascw(Str_one))
  150.     Str_unicode=Str_unicode&chr(59)
  151.   next
  152.   chinese2unicode=Str_unicode
  153. end function  

  154. 4、'URL解码
  155. Function URLDecode(enStr)
  156. dim deStr
  157. dim c,i,v
  158. deStr=""
  159. for i=1 to len(enStr)
  160.   c=Mid(enStr,i,1)
  161.   if c="%" then
  162.    v=eval("&h"+Mid(enStr,i+1,2))
  163.    if v<128 then
  164.     deStr=deStr&chr(v)
  165.     i=i+2
  166.    else
  167.     if isvalidhex(mid(enstr,i,3)) then
  168.      if isvalidhex(mid(enstr,i+3,3)) then
  169.       v=eval("&h"+Mid(enStr,i+1,2)+Mid(enStr,i+4,2))
  170.       deStr=deStr&chr(v)
  171.       i=i+5
  172.      else
  173.       v=eval("&h"+Mid(enStr,i+1,2)+cstr(hex(asc(Mid(enStr,i+3,1)))))
  174.       deStr=deStr&chr(v)
  175.       i=i+3
  176.      end if
  177.     else
  178.      destr=destr&c
  179.     end if
  180.    end if
  181.   else
  182.    if c="+" then
  183.     deStr=deStr&" "
  184.    else
  185.     deStr=deStr&c
  186.    end if
  187.   end if
  188. next
  189. URLDecode=deStr
  190. end function

  191. '判断是否为有效的十六进制代码
  192. function isvalidhex(str)
  193. dim c
  194. isvalidhex=true
  195. str=ucase(str)
  196. if len(str)<>3 then isvalidhex=false:exit function
  197. if left(str,1)<>"%" then isvalidhex=false:exit function
  198.   c=mid(str,2,1)
  199. if not (((c>="0") and (c<="9")) or ((c>="A") and (c<="Z"))) then isvalidhex=false:exit function
  200.   c=mid(str,3,1)
  201. if not (((c>="0") and (c<="9")) or ((c>="A") and (c<="Z"))) then isvalidhex=false:exit function
  202. end function
  203. %>
复制代码


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|紫影基地

GMT+8, 2025-1-12 12:08 , Processed in 0.080788 second(s), 18 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表