因为对于包括汉字的文本,由于编码不同,可能是ANSI,也可能是UTF-8,因此,我需要能区分开不同的编码,以便于通过进一步的代码转换将不同的文件全部统一成一种编码格式。
我的初步设想,是通过码段来判断,不知道大家有没有什么好的思路和方法,谢谢!
另外,如能提供UTF8的中文详细码段,也很感谢!

解决方案 »

  1.   

    如我提问的文中所述,我搜索了,但找不着,UTF8的码段,如果你有,能否提供一下?谢谢!
      

  2.   

    用IsTextUnicode()这个API函数吧
    我是从《Windows程序设计》的第11章看到这个函数的,你可以参考一下这本书,网上有电子版下载的。
      

  3.   

    你可以在Windows下把普通文本另存为UTF-8格式,你就可以看见头上加了什么值了
      

  4.   

    TO yzx0023: 您所说的这种方案是针对于特例的,我早试过了.但是现在由于处理的是数据流,没有前置标识.
    TO yaozijian110: 我需要区分的不是Unicode,而是Ansi/UTF8再问,谢谢!
      

  5.   

    gz,如果元文件是文本文件,可以通过文件头判断: bool bIsANSI = true;

    FILE *hFile = fopen(sFileName,"rb");
    if(hFile==NULL) {
    CString sMsg;
    sMsg.Format(_T("打开原始文件[%d]时出错!"), sFileName);
    return false;//
    }

    unsigned short ch1 = fgetc(hFile);
    unsigned short ch2 = fgetc(hFile);
    if(ch1==0xff && ch2==0xfe)
    {
    bIsANSI = false;
    }
      

  6.   

    TO 楼上:不是文本文件,是字符流。文本的方式已解决。而且对于UTF8,其文件头并非你所说的FF FE(这是Unicode),而是EF BB BF再请问,对于字符流的如何判断是ANSI还是UTF-8
    还有:声明,没有头信息可以借鉴的。
      

  7.   

    对于每个 Unicode 字符,UTF-8 用可变数目的字节来对该字符进行编码。对于较低的 127 个 ASCII 字符,此编码进行了优化,从而产生了一种能够以国际化的方式对英语进行编码的高效机制。UTF-8 标识符是 Unicode 字节顺序标记(十六进制 0xFEFF),它在 UTF-8 中表示为十六进制 0xEF 0xBB 0xBF。字节顺序标记用于将 UTF-8 文本与其他编码区分开来。上面来自msdn,看上去,字符流也应该包含头的,否则是不合法的字符流
      

  8.   

    To blastall: 字符流并不象文件,对于网络上的一些站点,如果有UTF-8格式的网页的时候,得到字节流就是没有标志头的。
      

  9.   

    IMultiLanguage2 :: DetectInputCodepage
      

  10.   

    太不幸了,http://www.unicode.org,应该可以查到相关编码