您正在使用 IPV4 [44.222.118.194] 访问本站,您本次已经查看了 1 页
用户名: 密 码: 验证码:     用QQ登录本站
首页 软件 编程 笑话 知识 公告 台风 日历 计算器
悟空收录网       [公益]保护绿色环境,构建和谐社会      

【腾讯云】 爆款2核2G3M云服务器首年 61元,叠加红包再享折上折      
[公益] 地球是我家,绿化靠大家      
2024年 清明节 006
2024年 劳动节 033
2025年 元 旦 278
2025年 春 节 306
综合数码金融娱乐服务报刊政府机构 推荐 排名 今日 申请 友情  
您现在的位置:首页 >> ASP/ASP.net >> 内容
本类新增
本类热门
ASP实现GB2312字符与区位码的相互转换的代码
内容摘要: (1)GB2312标准的定义,其实就是区位码。共94行,94列,行就是区号,列就是位号。如“啊”字区号为16,位号为01,它的区位码就是1601。(2)每个字符由区号+位号组成,共占两个字节。每个字节都是01-94,与通信控制符0-31冲突,所以,将区号和位号分别加上32,以避免冲突。(3)由上,每个字节是33-126,与ASCII编码0-127冲突,所以将......
(1)GB2312标准的定义,其实就是区位码。

共94行,94列,行就是区号,列就是位号。

如“啊”字区号为16,位号为01,它的区位码就是1601。

(2)每个字符由区号+位号组成,共占两个字节。

每个字节都是01-94,与通信控制符0-31冲突,

所以,将区号和位号分别加上32,以避免冲突。

(3)由上,每个字节是33-126,与ASCII编码0-127冲突,

所以将最高位置为1,也就是加上128,以避免冲突。

所以,最终,每个字节为161-254。

2。实现

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

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

代码如下:

'----取得区位码的函数---------------------

FunctionCharToQWM(byValstr)

dimsHex,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之间。

ifNOT(sHigh>="A1"ANDsHigh<="FE")then

CharToQWM=""

ExitFunction

endif

ifNOT(sLow>="A1"ANDsLow<="FE")then

CharToQWM=""

ExitFunction

endif

'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=""

ifiHigh<10then

sResult=sResult&"0"&Cstr(iHigh)

else

sResult=sResult&Cstr(iHigh)

endif

ifiLow<10then

sResult=sResult&"0"&Cstr(iLow)

else

sResult=sResult&Cstr(iLow)

endif

CharToQWM=sResult

EndFunction

'----根据区位码得到字符的函数---------------------

FunctionQWMToChar(byValstr,byValdoCheckFlg)

dimsHex,sHigh,sLow,iLow,iHigh,sResult

'-------------检查输入格式--------------

ifdoCheckFlgthen

ifLen(str)<>4then

QWMToChar=""

ExitFunction

endif

'--4位必须都是数字

dimi,iAsc

fori=1to4

iAsc=Asc(mid(str,i,1))

ifNOT(iAsc>=&H30ANDiAsc<=&H39)then

QWMToChar=""

ExitFunction

endif

next

'--区号,位号都要在01-94之间

iHigh=Clng(Left(str,2))

iLow=Clng(Right(str,2))

ifNOT(iHigh>=1ANDiHigh<=94)then

QWMToChar=""

ExitFunction

endif

ifNOT(iLow>=1ANDiLow<=94)then

QWMToChar=""

ExitFunction

endif

endif

'-------------检查完毕------------------

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)

EndFunction

使用方法:

-----------------------------------------------------------------------------------------------------

代码如下:

dimi,str,sChar

str="娃哈哈"

fori=1toLen(str)

sChar=Mid(str,i,1)

Response.writesChar&":"&CharToQWM(sChar)&"<br>"

next

-----------------------------------------------------------------------------------------------------

dimstr

str="1601|1602|1603}

ifinstr(str,"|")>0then

dims,sCharArray,i

sCharArray=Split(str,"|")

fori=0toUbound(sCharArray)

s=s&QWMToChar(trim(sCharArray(i)),True)

next

str=s

else

str=QWMToChar(str,True)

endif

版权声明:本内容来源于网络,如有侵犯您的版权,请联系站长,本站收到您的信息后将及时处理。
上一篇:支持权重的无组件ASP广告显示代码

 

下一篇:asp实现取得数组中的最大值的代码

发布日期:2023/4/19
手机扫二维码直达本页
发布时间:13:51:08
点  击:14
录  入:壹家怡园
相关文章
Baidu
YiJiaCMS 7.3.8 build231228(MSSQL) 闽ICP备05000814号-1
本空间由腾讯云(轻量应用服务器)提供,Cloudflare提供加速防护
运行时间载入中.....