源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

ASP实现GB2312字符与区位码的相互转换的代码

  • 时间:2020-11-26 23:55 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:ASP实现GB2312字符与区位码的相互转换的代码
研究编码,得知GB2312编码与区位码的关系,尝试之后,得此程序。 搜索,似乎没人写,故发此地。 原创首发: http://bbs.blueidea.com http://mytju.com/classcode/ 任意转载,任意使用。 1.简述 (1)GB2312标准的定义,其实就是区位码。 共94行,94列,行就是区号,列就是位号。 如“啊”字区号为16,位号为01,它的区位码就是1601。 (2)每个字符由区号+位号组成,共占两个字节。 每个字节都是01-94,与通信控制符0-31冲突, 所以,将区号和位号分别加上32,以避免冲突。 (3)由上,每个字节是33-126,与ASCII编码0-127冲突, 所以将最高位置为1,也就是加上128,以避免冲突。 所以,最终,每个字节为161-254。 2。实现 原理很简单,加加减减即可实现。 直接将我完成的函数帖于此处。
[u]复制代码[/u] 代码如下:
'----取得区位码的函数---------------------  Function CharToQWM(byVal str)      dim sHex,sHigh,sLow,iLow,iHigh,sResult      sHex=Hex(Asc(str)) '取得字符的内码的编码,如B0A1,此编码是正确的顺序,不必交换高低位。      sHigh=Left(sHex,2) '取得编码的高位,如B0。      sLow=Right(sHex,2) '取得编码的低位,如A1。      'GB2312内码范围为&HA1A1--&HFEFE,每个字节都在A1-FE之间。      if NOT (sHigh>="A1" AND sHigh<="FE") then          CharToQWM=""          Exit Function      end if      if NOT (sLow>="A1" AND sLow<="FE") then          CharToQWM=""          Exit Function      end if      'GB交换码仅使用了7位,高位置1,即为内码。反过来就是将高位置0,可得到交换码。      iLow=Clng("&H" & sLow)-128       iHigh=Clng("&H" & sHigh)-128      '区位码与控制码0-31冲突,所以加上32之后,即是交换码。反过来减去32即可。      iLow=iLow-32      iHigh=iHigh-32      'OK,区位码已经得到。      sResult=""      if iHigh<10 then          sResult = sResult & "0" & Cstr(iHigh)      else          sResult = sResult & Cstr(iHigh)      end if      if iLow<10 then          sResult = sResult & "0" & Cstr(iLow)      else          sResult = sResult & Cstr(iLow)      end if      CharToQWM=sResult  End Function  '----根据区位码得到字符的函数---------------------  Function QWMToChar(byVal str,byVal doCheckFlg)      dim sHex,sHigh,sLow,iLow,iHigh,sResult      '-------------检查输入格式--------------      if doCheckFlg then          if Len(str)<>4 then              QWMToChar=""              Exit Function          end if          '--4位必须都是数字          dim i,iAsc          for i=1 to 4              iAsc=Asc(mid(str,i,1))              if NOT (iAsc>=&H30 AND iAsc<=&H39) then                  QWMToChar=""                  Exit Function              end if          next          '--区号,位号都要在01-94之间          iHigh=Clng(Left(str,2))          iLow=Clng(Right(str,2))          if NOT (iHigh>=1 AND iHigh<=94) then              QWMToChar=""              Exit Function          end if          if NOT (iLow>=1 AND iLow<=94) then              QWMToChar=""              Exit Function          end if      end if      '-------------检查完毕------------------      iHigh=Clng(Left(str,2))      iLow=Clng(Right(str,2))      iHigh=iHigh + 32 + 128      iLow=iLow + 32 + 128      sHex=Hex(iHigh) & Hex(iLow)      QWMToChar=Chr("&H" & sHex)  End Function 
使用方法: -----------------------------------------------------------------------------------------------------
[u]复制代码[/u] 代码如下:
dim i,str,sChar  str="娃哈哈"  for i=1 to Len(str)         sChar=Mid(str,i,1)          Response.write sChar & ":" & CharToQWM(sChar) &"<br>"  next  -----------------------------------------------------------------------------------------------------  dim str  str="1601|1602|1603}  if instr(str,"|")>0 then         dim s,sCharArray,i         sCharArray=Split(str,"|")         for i=0 to Ubound(sCharArray)                s=s & QWMToChar(trim(sCharArray(i)),True)         next         str=s  else         str=QWMToChar(str,True)  end if 
....... ----------------------------------------------------------------------------------------------------- 3.在线使用 http://www.mytju.com/classcode/tools/quweima.asp 进入以上网址即可在线查阅。
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部