网络编程
位置:首页>> 网络编程>> Asp编程>> ASP实现GB2312字符与区位码的相互转换

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

作者:萧萧小雨 来源:经典论坛 发布时间:2009-12-28 10:27:00 

标签:GB2312,区位码,转换

研究编码,得知GB2312编码与区位码的关系,尝试之后,得此程序。

搜索,似乎没人写,故发此地。

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。实现

原理很简单,加加减减即可实现。

直接将我完成的函数帖于此处。


'----取得区位码的函数---------------------
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

使用方法:

-----------------------------------------------------------------------------------------------------
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
.......

0
投稿

猜你喜欢

  • 在向大家详细介绍Linux mysql之前,首先让大家了解下Linux mysql,然后全面介绍Linux mysql,希望对大家有用。1.
  • 想做个和IBM公司一样的网站LOGO,试了半天也没有做出来,郁闷之下,只好求高手帮助!先在这里谢谢了!方法一1、写上IBM,调节字号颜色2、
  • HTML5本地存储初探(二)完成了数据的本地存储,就要将文件存储也搞定。为了实现文件的本地存储,html5搞了一个叫 manifest 的文
  • 下面就是我们的authenticate.asp页面,在这里,将用户的信息收集起来,连同最初的URL一起传到一个识别用户身份的页面中。我们可用
  • 今年我们的祖国多灾多难 雪灾的阴影还没散去又发生了地震。让我们用手中的画笔为5.12地震受灾同胞们祈福并号召大家为灾区人民捐款!中国插画网祈
  • 以发布目录为例:<OBJECT ID="agobjOraSession" RUNAT=&quo
  • 本文详细解说了MySQL Order By Rand()效率优化的方案,并给出了优化的思路过程,是篇不可多得的MySQL Order By
  • NOMONEYDAY123114321-45324212-102250331008为了符合阅读习惯,最终报表希望是如下格式:NOMONTUE
  • 如何在数据库中限制检索行数?为了照顾显示器屏幕的大小,使检索结果更整齐明了一些,请问,可以控制数据库的检索行数吗?  &
  • 大家都知道,数据库的安全性是很重要的,它直接影响到数据库的广泛应用。用户可以采用任意一种方法来保护数据库应用程序,也可以将几种方法结合起来使
  • 万维网联盟(W3C)发布了HTML 5规格说明书的草稿 ,这是自HTML 4在十多年前发布以来的第一个主要的修订版.在这期间,随着开发者逐渐
  • 一个正则表达式就是由普通字符(例如字符 a 到 z)以及特殊字符(称为元字符)组成的文字模式。该模式描述在查找文字主体时待匹配的一个或多个字
  • 人的大脑通过双眼来辨别视觉图形获取信息。大脑根据储存的经验,将所看到的视觉图形建立起优先级。由此可见,一个良好的视觉设计可以帮助大脑迅速有效
  • 一个用asp来处理jmail发信的过程,及使用方法.   发信时,直接调用这个过程就行了,很方便。<%   dim
  • http://swik.net/Ajax/Ajax+Mistakes在某网站瞎逛时,发现这个链接,进去逛了逛,觉得很有意思,大家也可以去看看
  • 当产品走到HTML Coding这块,多浏览器的测试是很重要,也很麻烦的一个环节。现在大家主要是保证IE6,7及Firefox的一致。bro
  • 1. 横排往下会影响阅读速度。如12345678的单排单列数字,肯定是竖排阅读快。但多行多列的整块信息,横排并不见得就比竖排慢,比如所有简体
  •  在WEB2.0 网页充斥的年代,身边无时无刻都听到这样的声音:“拒绝海报式设计,要做有用的设计,要简洁,要清爽,要大气”产品经理
  • 姓名的翻译: 英语是名(First name)在前,姓(Last name)在后。中文地址的翻译:如果你英语水平不高,填表时只要国家名用英语
  • 在XHTML标签中有一些标签的作用是相似的,当然这里的相似是指语义相似,以至于很多人都不清楚这些相似的标签如何使用,那么今天的主题就是分解相
手机版 网络编程 asp之家 www.aspxhome.com