源码网,源码论坛,源码之家,商业源码,游戏源码下载,discuz插件,棋牌源码下载,精品源码论坛

 找回密码
 立即注册
查看: 393|回复: 40

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

[复制链接]

7万

主题

861

回帖

32万

积分

论坛元老

Rank: 8Rank: 8

积分
329525
发表于 2007-5-11 00:00:00 | 显示全部楼层 |阅读模式
研究编码,得知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。实现
原理很简单,加加减减即可实现。
直接将我完成的函数帖于此处。

复制代码 代码如下:
'----取得区位码的函数--------------------- 
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 
.......
-----------------------------------------------------------------------------------------------------
3.在线使用
http://www.mytju.com/classcode/tools/quweima.asp
进入以上网址即可在线查阅。
回复

使用道具 举报

0

主题

2万

回帖

115

积分

注册会员

Rank: 2

积分
115
发表于 2022-8-9 02:31:12 | 显示全部楼层
来看看!!!
回复 支持 反对

使用道具 举报

1

主题

2万

回帖

155

积分

注册会员

Rank: 2

积分
155
发表于 2022-9-23 23:37:02 | 显示全部楼层
收下来看看怎么样
回复 支持 反对

使用道具 举报

1

主题

2万

回帖

79

积分

注册会员

Rank: 2

积分
79
发表于 2022-12-9 17:54:19 | 显示全部楼层
下载来瞧瞧
回复 支持 反对

使用道具 举报

0

主题

2万

回帖

120

积分

注册会员

Rank: 2

积分
120
发表于 2023-4-18 23:30:06 | 显示全部楼层
的沙发水电费水电费
回复 支持 反对

使用道具 举报

27

主题

2万

回帖

331

积分

中级会员

Rank: 3Rank: 3

积分
331
发表于 2023-6-25 22:56:49 | 显示全部楼层
人都不在了啊 啊
回复 支持 反对

使用道具 举报

16

主题

2万

回帖

174

积分

注册会员

Rank: 2

积分
174
发表于 2023-9-17 16:00:21 | 显示全部楼层
来看看怎么样
回复 支持 反对

使用道具 举报

1

主题

1万

回帖

51

积分

注册会员

Rank: 2

积分
51
发表于 2023-12-4 08:25:22 | 显示全部楼层
看看怎么样再说
回复 支持 反对

使用道具 举报

1

主题

2万

回帖

319

积分

中级会员

Rank: 3Rank: 3

积分
319
发表于 2024-4-21 12:44:57 | 显示全部楼层
先把创新班才能下班才能下班
回复 支持 反对

使用道具 举报

匿名  发表于 2024-4-21 14:57:11

Самарканд Трансфер Из Аэропорта

15 отзывов https://letstrip.uz/ru/transfer/17

Наличие бассейна https://letstrip.uz/ru/transfer/17

Туры в Узбекистан 2024 из Москвы https://letstrip.uz/

С 29 https://letstrip.uz/ru/transfer/9
02 https://letstrip.uz/ru/transfer/15
2024 на 6 ночей https://letstrip.uz/ru/transfer/15

На территории страны располагается огромное количество заповедников, горных баз со множеством экскурсионных маршрутов https://letstrip.uz/ru/transfer/9
  Сейчас представители туристической отрасли данного государства с радостью предоставляют клиентам самые лучшие условия для отдыха https://letstrip.uz/ru/transfer/14

86 отзывов https://letstrip.uz/ru/transfer/7

回复 支持 反对

使用道具

高级模式
B Color Image Link Quote Code Smilies

本版积分规则

手机版|小黑屋|网站地图|源码论坛 ( 海外版 )

GMT+8, 2025-1-19 02:42 , Processed in 0.256936 second(s), 26 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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