汉字编码启发之1
'tuenhai所用获得汉字或字符对应的区位符
Function quwei(ByVal x As String) As String '
x = Asc(x) 'Asc 返回输入字符的码位或字符代码。对于单字节字符集 (SBCS),返回值范围为 0 到 255;对于双字节字符集 (DBCS),返回值范围为 -32768 到 32767。对于单字节 ASCII 字符的图表,请参见 ASCII 字符代码。
x = Hex((x)) '返回表示数字的十六进制值的字符串。刘=FFFFC1F5,前面的4个F去掉,得到16进制的内码。16进制的C=10进制的12
Dim str As String
str = Format(CDec("&H" & Strings.Mid(x, 5, 2)) - 160, "00") & Format(CDec("&H" & Strings.Mid(x, 7, 2)) - 160, "00")
'Strings.Mid(x, 5, 2) '得到16进制的内码,“刘”内码高位=C1
'CDec("&H" & str) '转换成10进制内码,"&H"表示16进制 “刘”内码高位=193
'-160 得到10进制区码, “刘”区码是33
'Format(decQu, "00") '格式化为两位数表示
Return str
End Function
'GB2312的原文还是区位码,从区位码到内码,需要在高字节和低字节上分别加上A0,
'在DBCS中,GB内码的存储格式始终是big endian,即高位在前。
' 区位码是与汉字一一对应的编码,用四位数字表示, 前两位从01 到94称区码,后两位从01到94称位码。 一个汉字的前一半是 ASCⅡ码为“160+区码”的字符,后一半是ASCⅡ码为“160+ 位码”的字符。
'例如:“刘”的区位码是 3385,其意为区码33位码85,它是由ASCⅡ码为160+33=193和160+85=245的两个字符组成。
Function quwei(ByVal x As String) As String '
x = Asc(x) 'Asc 返回输入字符的码位或字符代码。对于单字节字符集 (SBCS),返回值范围为 0 到 255;对于双字节字符集 (DBCS),返回值范围为 -32768 到 32767。对于单字节 ASCII 字符的图表,请参见 ASCII 字符代码。
x = Hex((x)) '返回表示数字的十六进制值的字符串。刘=FFFFC1F5,前面的4个F去掉,得到16进制的内码。16进制的C=10进制的12
Dim str As String
str = Format(CDec("&H" & Strings.Mid(x, 5, 2)) - 160, "00") & Format(CDec("&H" & Strings.Mid(x, 7, 2)) - 160, "00")
'Strings.Mid(x, 5, 2) '得到16进制的内码,“刘”内码高位=C1
'CDec("&H" & str) '转换成10进制内码,"&H"表示16进制 “刘”内码高位=193
'-160 得到10进制区码, “刘”区码是33
'Format(decQu, "00") '格式化为两位数表示
Return str
End Function
'GB2312的原文还是区位码,从区位码到内码,需要在高字节和低字节上分别加上A0,
'在DBCS中,GB内码的存储格式始终是big endian,即高位在前。
' 区位码是与汉字一一对应的编码,用四位数字表示, 前两位从01 到94称区码,后两位从01到94称位码。 一个汉字的前一半是 ASCⅡ码为“160+区码”的字符,后一半是ASCⅡ码为“160+ 位码”的字符。
'例如:“刘”的区位码是 3385,其意为区码33位码85,它是由ASCⅡ码为160+33=193和160+85=245的两个字符组成。