当前位置: 首页 > 图文教程 > 网络编程 > ASP > ASP实现GB2312字符与区位码的相互转换的代码

ASP
ASP正则表达式技巧
ASP Access实现网站计数器(访问量)
ASP新闻分页,将一篇过长的文章分页,生成静态页面
一些关于asp 购物车的想法
一个sql查询器,自动画表格填字段
ASP实现文件直接下载的代码
把网页中的(电话,qq等数字)生成图片的ASP程序
asp长文章用分页符来分页显示
Asp函数介紹(37个常用函数)
ASP中的面向对象类
分页实现方法的性能比较
asp ajax跨域提交数据
asp修改文件和文件夹的名字的代码
ASP 多关键词查询实例代码
asp被杀毒软件误删的解决方法
asp 多关键词搜索的简单实现方法
asp 根据IP地址自动判断转向分站的代码
asp dictionary对象的用法
ASP 千万级数据分页的存储过程
ASP隐藏真实文件的下载功能实现代码

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


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-09-13   浏览: 115 ::
收藏到网摘: n/a

研究编码,得知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
进入以上网址即可在线查阅。