读取一个exe文件,能和ultraedit的ASCII栏那样能显示可能存在的汉字

解决方案 »

  1.   

    在VB中,从GB2312码来讲
    如果 Asc(Text)< 0 的话可以判断为汉字
    从字节流来讲
    如果 高位字节 <= &HA0 的话,可以判断为汉字
      

  2.   

    这主要是要一个范围问题,比如最小的是gb2312,最大的目前是gb18030-2005,两者的范围是不一样的,gb2312可以简单的认为是0xa0以上两个字节连续存在。
      

  3.   

    虽然不了解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
      

  4.   

    对于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" 不包含汉字
      

  5.   

    对楼主所说的问题而言,最好是用正则
    dim result as string 
    result = Regex.Replace(读取来的字符串,"[^\u4E00-\u9FA5]","")
    'result就是你要的结果,所有中文。
      

  6.   

       //GBK汉字内码范围
       //区码  ,位码
       //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
      

  7.   

    这里我我有笔误
    如果 高位字节 <= &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中规定的全部汉字。
      

  8.   

    http://download.csdn.net/source/1785343
      

  9.   

    不同编码的判断方法是不一样的,gb2312可以认为是0xa1a1-0xfefe,gbk就超了这个,utf8和utf16也不一样,楼主所说的这些软件,都是按gb2312判断的,以unicode存储的文件,就不被显示成汉字。
      

  10.   

    这么说吧 不是汉字也可以 只要是一般电脑都可以显示的文字就行 太阳文都可以
    一个字节的值范围是0~255,好像其中可见字符的ASCII码值范围只是32~126,不知道理解对不对。还有 我问的不是字符串中判断 而是读取的字节值来判断多谢各位