虽然不了解a0如何得到的,但搜索了一下,基本vb6相关的都是判断<0或大于?小于?a0。不论如何,这个方法都是区分不出中文、韩文和日文的。这个可以自己去试。Private Sub Command1_Click() Dim s As String s = "中文"'ち这个日文和中文的测试结果是一样的,不论1楼说的小于还是5楼说的大于 Dim i As Integer Dim hexstr As String hexstr = Right(Hex(Asc(s)), 2) i = Val("&h" + hexstr) MsgBox i <= &HA0 End Sub
对于google中和csdn中没有正确严谨的vb6判断字符串中是否包含汉字,我感到很悲哀。难怪人家说我们vb6的都是初级新手用的。判断汉字的做法,都如此不严谨。叹息啊。 给出一个比较严谨的判断是否包含中文方法好了。希望日后有人搜索到,能够有帮助。 创建窗体,放一个按钮,默认名字,粘贴如下代码在代码页面。Private Sub Command1_Click() Dim s1, s2, s3, s4 As String s1 = "中文" s2 = "ち" s3 = "English" s4 = "123" Dim result As String result = """" + s1 + """ " + IIf(IncludeChinese(s1), "包含汉字", "不包含汉字") result = result + vbCrLf + """" + s2 + """ " + IIf(IncludeChinese(s2), "包含汉字", "不包含汉字") result = result + vbCrLf + """" + s3 + """ " + IIf(IncludeChinese(s3), "包含汉字", "不包含汉字") result = result + vbCrLf + """" + s4 + """ " + IIf(IncludeChinese(s4), "包含汉字", "不包含汉字") MsgBox result End Sub'判断是否字符串中包含汉字 Public Function IncludeChinese(ByVal s As String) As Boolean '定义字节数组指向字符串 Dim data() As Byte data = s '临时变量,Integer长度为2,正好用来判断是否是汉字,因为汉字是双字节的 Dim t As Integer '定义循环变量 Dim i As Integer '汉字边界值 '因为直接写&H9FA5会认为成integer的负数,所以要写成字符串,进行转换 Dim lb, ub As Long lb = CLng("&H4E00") '汉字最小值 ub = CLng("&H9FA5") '循环判断,汉字的范围是4E00 ~ 9FA5 '因为我不太懂vb6的技巧写法,就用一个比较繁琐的写法做类型转换 For i = 0 To UBound(data) Step 2 t = CLng("&h" + Hex(data(i) + data(i + 1) * 255)) '连续的2个字节拼接为一个integer If t >= lb And t <= ub Then IncludeChinese = True '找到任何一个汉字则返回True Exit Function End If Next IncludeChinese = False '不包含汉字 End Function 输出为:"中文" 包含汉字 "ち" 不包含汉字 "English" 不包含汉字 "123" 不包含汉字
对楼主所说的问题而言,最好是用正则 dim result as string result = Regex.Replace(读取来的字符串,"[^\u4E00-\u9FA5]","") 'result就是你要的结果,所有中文。
如果 Asc(Text)< 0 的话可以判断为汉字
从字节流来讲
如果 高位字节 <= &HA0 的话,可以判断为汉字
Dim s As String
s = "中文"'ち这个日文和中文的测试结果是一样的,不论1楼说的小于还是5楼说的大于
Dim i As Integer
Dim hexstr As String
hexstr = Right(Hex(Asc(s)), 2)
i = Val("&h" + hexstr)
MsgBox i <= &HA0
End Sub
给出一个比较严谨的判断是否包含中文方法好了。希望日后有人搜索到,能够有帮助。
创建窗体,放一个按钮,默认名字,粘贴如下代码在代码页面。Private Sub Command1_Click()
Dim s1, s2, s3, s4 As String
s1 = "中文"
s2 = "ち"
s3 = "English"
s4 = "123"
Dim result As String
result = """" + s1 + """ " + IIf(IncludeChinese(s1), "包含汉字", "不包含汉字")
result = result + vbCrLf + """" + s2 + """ " + IIf(IncludeChinese(s2), "包含汉字", "不包含汉字")
result = result + vbCrLf + """" + s3 + """ " + IIf(IncludeChinese(s3), "包含汉字", "不包含汉字")
result = result + vbCrLf + """" + s4 + """ " + IIf(IncludeChinese(s4), "包含汉字", "不包含汉字")
MsgBox result
End Sub'判断是否字符串中包含汉字
Public Function IncludeChinese(ByVal s As String) As Boolean
'定义字节数组指向字符串
Dim data() As Byte
data = s
'临时变量,Integer长度为2,正好用来判断是否是汉字,因为汉字是双字节的
Dim t As Integer
'定义循环变量
Dim i As Integer
'汉字边界值
'因为直接写&H9FA5会认为成integer的负数,所以要写成字符串,进行转换
Dim lb, ub As Long
lb = CLng("&H4E00") '汉字最小值
ub = CLng("&H9FA5")
'循环判断,汉字的范围是4E00 ~ 9FA5
'因为我不太懂vb6的技巧写法,就用一个比较繁琐的写法做类型转换
For i = 0 To UBound(data) Step 2
t = CLng("&h" + Hex(data(i) + data(i + 1) * 255)) '连续的2个字节拼接为一个integer
If t >= lb And t <= ub Then
IncludeChinese = True '找到任何一个汉字则返回True
Exit Function
End If
Next
IncludeChinese = False '不包含汉字
End Function
输出为:"中文" 包含汉字
"ち" 不包含汉字
"English" 不包含汉字
"123" 不包含汉字
dim result as string
result = Regex.Replace(读取来的字符串,"[^\u4E00-\u9FA5]","")
'result就是你要的结果,所有中文。
//区码 ,位码
//81-A0 ,40-7E 80-FE
//AA-AF ,40-7E 80-A0
//B0-D6 ,40-7E 80-FE
//D7 ,40-7E 80-F9
//D8-F7 ,40-7E 80-FE
//F8-FE ,40-7E 80-A0
如果 高位字节 <= &HA0 的话,可以判断为汉字
应该是
如果 高位字节 > &HA0 的话,可以判断为汉字
以下是微软的区位输入法中的帮助信息
=================================================================概述 Windows 2000 内置的内码输入法支持区位码、GBK内码、UNICODE码的输入。 区位码的前二位是区码,后二位是位码。区的编码是从 01-94,位的编码也是从 01-94。在区位码输入方式下,键入相应的区码和位码就可以输入一个汉字。汉字是从 16 区到 87 区,01 至 15 区是图形符号和字母。 区位码输入支持《信息交换用汉字编码字符集 -- 基本集》即 GB2312-80 的内码输入方式。内码编码的范围为:0xA1A1~0xFEFE。 GBK内码输入覆盖了汉字扩展内码规范 -- GBK 中规定的全部汉字。 UNICODE码输入支持《通用多八位编码字符集 (UCS) 》- 国际标准ISO/IEC10646.1-1993中规定的全部汉字。
一个字节的值范围是0~255,好像其中可见字符的ASCII码值范围只是32~126,不知道理解对不对。还有 我问的不是字符串中判断 而是读取的字节值来判断多谢各位