假设所有文件数据都已经由Open FileName For Binary As #FileNumber
载入到字节数组中。如何区分开以下几种文本文件:
ANSI/GBK简体 GBK繁体 BIG5繁体 Unicode UTF-8并把它们都转到VB内部的 Unicode ?如何按需要,最终显示到屏幕上繁体或简体?

解决方案 »

  1.   

    ANSI/Unicode UTF-8文件只要比较文件头就可以区别了
    繁简比较麻烦,因为两者可以共存
      

  2.   

    这个比较难(可能吗?疑惑中),如果可以,那么用Word打开不同编码的文本文件,Word就不用让你自己选择编码并预览结果来确定了,说明微软也给不出完善的自动判别方法。据我所知纯文本也没有什么文件头差别。
      

  3.   

    Unicode的文件以0xfe 0xff或0xff 0xfe开头,前者是Big Endian编码,后者是Little Endian编码,而非Unicode的文件基本上没什么算法可以保证可以区分出GB和Big 5,否则用IE看台湾的网页也就没有那么多乱码了。
      

  4.   

    偶的要求并不是很高,至少能做到XP下的记事本的功能。
    它就能分辨UTF-8 UTF16 ANSI 格式的。
      

  5.   

    那就找我上面的方法办吧。Unicode格式是很好判断的,而ANSI编码实际上是按照及其缺省的编码方式解码的,比如中文版的XP缺省的就是解码成GBK,台湾的XP解码就是Gig 5,这个缺省的解码方式可以在控制面板里设置,不过这个就不用编程的人考虑了
      

  6.   

    zhaidafan() 说的对,这也是唯一能区分得出的编码了。哈,目前只有Mac和少数Unix上用Big Endian吧(没搞反吧?)。
      

  7.   

    可是Unicode有UTF8和UTF16之分,这两个用的很多啊,如何区分呢?偶遇到的实际问题是:
    本来只想做一个最简单的修改文本文件的功能,
    就用了Line Input ,结果。可想而知,
    除了ANSI外,其它打开都是乱码,郁闷网上找到一些转换UTF8的代码,但鬼知道哪个是UTF8啊? :(
      

  8.   

    不好搞。只能让用户确定!
    unicode如果带BOM(标示自身编码方式和字节序的特殊字串,BYTE ORDER MARK)还可有根据文件头2个字节来区分,如果不带是没办法区分的。
      

  9.   

    可是偶好像没见过XP的记事本打开时要用户选择的呀?
    (保存时到可以让用户选择)
    那个记事本也不过65K而已,应该不是很复杂吧?
      

  10.   

    前面同志说的有借鉴之处,可以从文件头判断,UTF-8编码我做过,几十万个汉字的转换库还在,说说怎么能判断是简体和繁体,这个很简单,取一个字符,判断其区位码(算法都公开的烂了),从而获得该字符所在区位,与标准区位相比较即可。