使用VBA如何将中文字符转换为区位码

版权声明:本文为博主原创文章,转载请注明出处。 https://blog.csdn.net/taller_2000/article/details/80220111

相信很多朋友都遇到过,填报一些申请表的时候,需要填写区位码,可是区位码是个什么东西呢?在百度百科中词条如是说:

1980年,为了使每个汉字有一个全国统一的代码,我国颁布了汉字编码的国家标准:GB2312-80《信息交换用汉字编码字符集》基本集,这个字符集是我国中文信息处理技术的发展基础,也是目前国内所有汉字系统的统一标准。国标码是一个四位十六进制数,区位码是一个四位的十进制数,每个国标码或区位码都对应着一个唯一的汉字或符号,但因为十六进制数我们很少用到,所以大家常用的是区位码,它的前两位叫做区码,后两位叫做位码。国标码与区位码之间的关系,请查阅“字符编码”词条。 —— 摘自百度百科

看着区位码似乎是个古董级别的家伙,为啥还在用呢?百思不得其解。每次都只能上网去转码,而且多数网站提供的都是每次转换一个中文字符,太麻烦了,还是要自力更生,来个自定义函数吧。

Function Chinese2QVWEI(strChinese As String) As String
    Dim strHex As String
    Dim strHigh As String
    Dim strLow As String
    Dim strChar As String
    Dim i As Integer
    Select Case Len(strChinese)
    Case Is = 0
        Chinese2QVWEI = ""
    Case Is > 0
        For i = 1 To Len(strChinese)
            strChar = Mid(strChinese, i, 1)
            If Asc(strChar) < 0 Then
                strHex = Hex(Asc(strChar))
                strHigh = Format(CInt("&h" + Mid(strHex, 1, 2)) - 160, "00")
                strLow = Format(CInt("&h" + Mid(strHex, 3, 2)) - 160, "00")
                If strHigh < 0 Or strLow < 0 Then
                    MsgBox strChinese & Chr(32) & "是非法字符!"
                    Chinese2QVWEI = Chinese2QVWEI & " -"
                Else
                    Chinese2QVWEI = Chinese2QVWEI & " " & strHigh & strLow
                End If
            Else
                Chinese2QVWEI = Chinese2QVWEI & " -"
            End If
        Next i
    End Select
    Chinese2QVWEI = Mid(Chinese2QVWEI, 2)
End Function

转换过程其实不复杂,希望理解具体转换机制的请自行补脑非。
注意:非中文字符不存在对应的区位码。

来个代码测试一下:

Sub DEMO()
    Debug.Print Chinese2QVWEI("我的CSDN博客")
End Sub

输出结果为:4650 2136 - - - - 1809 3145,由于其中的CSDN为非中文字符,因此结果字符串中有4个减号。

中文字符转换为区位码就是这么简单!

猜你喜欢

转载自blog.csdn.net/taller_2000/article/details/80220111