我要读取一个文件,但是这个文件可能是UNICODE也可能是 ascii码,最终我是想都变成ascii码,该如何操作?

解决方案 »

  1.   


    先按Unicode读取后用WideCharToMultiByte转换成ANSI
      

  2.   

    可能是UNICODE也可能是 ascii码
    //哪些是Unicode,哪些是Ansi,有没有规律?
      

  3.   

    读取文件的前两个字节(如果还有UTF-8码的文件,则最好是读取三个字节)用这两个字节与Unicode BOM(比如UTF-16为"\xFE\xFF")进行匹配,如果匹配成功,则以Unicode文件处理,如果所有可能的标识都匹配失败(至少有三种,UTF-8 BOM,UTF-16 BOM,UTF-16-Big-Endian),就以ANSI码处理。
      

  4.   

    个别ms的函数可以将文件都读成unicode格式的。
      

  5.   

    The WideCharToMultiByte function maps a wide-character string to a new character string. The new character string is not necessarily from a multibyte character set. int WideCharToMultiByte(
      UINT CodePage,            // code page
      DWORD dwFlags,            // performance and mapping flags
      LPCWSTR lpWideCharStr,    // wide-character string
      int cchWideChar,          // number of chars in string
      LPSTR lpMultiByteStr,     // buffer for new string
      int cbMultiByte,          // size of buffer
      LPCSTR lpDefaultChar,     // default for unmappable chars
      LPBOOL lpUsedDefaultChar  // set when default char used
    );The MultiByteToWideChar function maps a character string to a wide-character (Unicode) string. The character string mapped by this function is not necessarily from a multibyte character set. int MultiByteToWideChar(
      UINT CodePage,         // code page
      DWORD dwFlags,         // character-type options
      LPCSTR lpMultiByteStr, // string to map
      int cbMultiByte,       // number of bytes in string
      LPWSTR lpWideCharStr,  // wide-character buffer
      int cchWideChar        // size of buffer
    );---MSDN---
      

  6.   

    Unicode-16 文本文件前面2个字节有2种情况0xFF 0xEF
    0xEF 0xFF你判断一下就是的了
      

  7.   

    >>读取文件的前两个字节(如果还有UTF-8码的文件,则最好是读取三个字节)用这两个字节与Unicode BOM(比如UTF-16为"\xFE\xFF")进行匹配,如果匹配成功,则以Unicode文件处理,如果所有可能的标识都匹配失败(至少有三种, UTF-8 BOM,UTF-16 BOM,UTF-16-Big-Endian),就以ANSI码处理。
      

  8.   

    你用winhex看下,unicode和ascii码文件格式的不同,尤其是头几个字节,把这个不同转换成代码判断就可以了然后WideCharToMultiByte转换
      

  9.   

    楼主的意思是文件就已经是ANSI码了,对吧,你想不改程序直接读ANSI码,那么原先的程序就需要用一些条件编译的函数,比如_tcscpy就是拷贝字符串函数,他在UNICODE时就映射为wcscpy,ANSI时映射为strcpy,一定要注意运用类似于_tcscpy的通用函数
      

  10.   

    文本文件,会涉及字符集
    读文件中的换行符,是Unicode的,整个文件就是Unicode;否则就是Ascii
      

  11.   

    http://topic.csdn.net/u/20081204/00/0e16f524-3810-47dc-a5e1-64407f87be8b.html