五笔打字通主页
用编程方式获得某个汉字的区位码,或由某个区位码推算出汉字,在网上有好心人写出了相应的函数,在这里我提供出来:
Function QuWei(ByVal x As String) As String '获得某汉字或字符对应的的区位码
If Asc(x) >= 0 Then Exit Function
x = Hex(Asc(x))
QuWei = Format(CDec("&H" & Left(x, 2)) - 160, "00") & Format(CDec("&H" & Right(x, 2)) - 160, "00")
End Function
Function HanZi(ByVal x As String) As String '获得某区位码对应汉字或字符
HanZi = Chr("&H" & Hex(Val(Left(x, 2)) + 160) & Hex(Val(Right(x, 2)) + 160))
End Function
在这里我也说一下这两个函数的运用。
直接运用很简单:
汉字转区位码:
Msgbox QuWei("啊") 输出结果是:1601
区位码转汉字:
Msgbox HanZi("1601") 输出结果是:啊
--------------------------------------------
在区位码中,01到09区为682个特殊字符,16到87区为汉字区,包含6763个汉字,
一级汉字从1601-1694,1701-1794,.....5401-5494,5501-5589,共94*40-5=3755 个汉字
二级汉字从5601-5694,5701-5794,.....8601-8694,8701-8794,共94*32=3008 个汉字
根据上面的信息,我们可以根据上述的函数,来求出某个汉字的区位,再来分解GB汉字或非GB汉字。
例如,有字符串"大家喆早上镕好",其中“喆”“镕”两个是GBK汉字,用QuWei这个函数可以把喆镕两个字GBK汉字分解出来。
在窗体画一个按钮,点击事件输入以下代码
Private Sub Command1_Click()
Dim strA As String
Dim strB As String
Dim strC As String
strA = "大家喆早上镕好"
Dim strZJ As String
For i = 1 To Len(strA)
strZJ = Mid(strA, i, 1)
If Val(QuWei(strZJ)) >= 1601 And Val(QuWei(strZJ)) <= 8794 Then strB = strB & strZJ Else strC = strC & strZJ
Next
MsgBox strB
MsgBox strC
End Sub
运行上述代码,会输出“大家早上好”,随后再输出“喆镕”,成功把GB2312字符集中的汉字和字符集外的汉字区分开来。
来源:济亨网
本文链接:https://wb98.com/post/21.html