拿到一个文件,怎么知道它是以什么编码方式存储的呢??好急的!!!

解决方案 »

  1.   

    UTF8、Unicode、Unicode Swap(Unicode big endian)都会有一个标记头,否则就直接当ANSI文件处理
    UTF8前三个字节为(即BOM):&hEF、&hBB、&hBF
    Unicode前两个字节为:&hFF、&hFE
    Unicode Swap前两个字节为:&hFE、&hFF
      

  2.   

    unsigned大哥,能给个例子吗?我对vb文件操作不是很熟悉的 :)
      

  3.   

    unsigned大哥,能给个例子吗?我对vb文件操作不是很熟悉的 :)
    ===========================
    呵呵,那偶就更不熟悉了^_^
    偶只用Delphi/C++做过。
      

  4.   

    否则就直接当ANSI文件处理
    这句是错的
    如果是这样的话 就不会有
    WINXP下 
    在记事本输入“联通” 保存以后 再打开变成乱码的问题了
      

  5.   

    否则就直接当ANSI文件处理
    这句是错的
    如果是这样的话 就不会有
    WINXP下 
    在记事本输入“联通” 保存以后 再打开变成乱码的问题了
    ===================================================
    在这个问题上面没有对或者错误的说法,也曾有人说这是记事本的BUG,这又如何解释?要知道一个文件弄不好几就是上百兆以上,难不成一个个字符进行检测?那么就需要首先检测是否为文本文件,而这文本文件又如何检测法呢?对于Unicode和ANSI很显明的有差别,不是么?
    换句话说经这编码当中不仅有以上几种编码,还有UTF7也是一种标准编码,而这种编码不常用,也没有BOM。
      

  6.   

    to unsigned
    这个不算是记事本的BUG因为 记事本不是  “否则就直接当ANSI文件处理”而是因为记事本判断utf8 默认的判断方式是 
    看文件头几个字节的值的 110xxxxx 10xxxxxx 关键是这5个位
    联通的ASCII码是  C1 AA CD A8  即 11000001 10101010 11001101 10101000
    运气很不好的 全部满足了

    Unicode编码和utf-8编码之间的对应关系表 
    The table below summarizes the format of these different octet types.
      The letter x indicates bits available for encoding bits of the
      character number.  Char. number range  |        UTF-8 octet sequence
         (hexadecimal)    |              (binary)
      --------------------+---------------------------------------------
      0000 0000-0000 007F | 0xxxxxxx
      0000 0080-0000 07FF | 110xxxxx 10xxxxxx
      0000 0800-0000 FFFF | 1110xxxx 10xxxxxx 10xxxxxx    //////A/////////
      0001 0000-0010 FFFF | 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
    这是一个Unicode编码和utf-8编码之间的对应关系表。中文的Unicode编码范围在0000 0800-0000 FFFF 中。
      

  7.   

    to unsigned
    这个不算是记事本的BUG
    =======================
    个人观点不同罢了。
      

  8.   

    Dim TempFile As Long
        Dim LoadBytes() As Byte
        '以二进制读入文件内容
        TempFile = FreeFile
        Open FilePath For Binary As #TempFile
        ReDim LoadBytes(1 To LOF(TempFile)) As Byte
        Get #TempFile, , LoadBytes
        Close TempFile
        
        'On Error GoTo NoEncoding
        Dim i As Integer, FileCharset As String, strFileHead As String
        '从二进制流中分析文件头的编码信息
        For i = 1 To 3
            strFileHead = strFileHead & Hex(LoadBytes(i))
        Next
        '判断文件采用了何种编码
        If strFileHead = "EFBBBF" Then
        '前3个byte如果为 EF BB BF 则表示为 UTF-8编码
            FileCharset = "UTF-8"
        Else
            strFileHead = Left(strFileHead, 4)
            If strFileHead = "FEFF" Then
            '此时为 unicode big endian 编码
                FileCharset = "unicodeFFFE"
            ElseIf strFileHead = "FFFE" Then
            '此时为 unicode 编码
                FileCharset = "UNICODE"
            Else
            '否则默认为普通简体中文 GB2312
            '你如果知道其它编码的格式还可以继续的分析判断!
                FileCharset = "GB2312"
            End If
        End If