以前,我一直听别人说vc默认的文件格式是GBK,所以其常量字符串const char,不是以utf-8的格式存在的,但是我今天因为要做一个位处理,需要遍历const char[],却发现内存中每个char的值的16位形式却和unicode编码一致,这是为什么呢?因为GBK兼容unicode?可以如果完全兼容的话,在UTF-8环境下为何传输的中文字符还是会乱码呢?

解决方案 »

  1.   

    VC6,vs2003默认GBK,2005以后默认UNICODE.
      

  2.   

    不,中文版的vs一直都是用GBK来保存文件格式的,所以它编写的常量字符串都是GBK,这一点在用一些纯unicode的库会出现乱码必须转码时可以明显看出来,倒是中间变量vs都是用的unicode
      

  3.   

    VS保存源码文件的确是用GBK编码,我以为你是说工程里的编码.
      

  4.   


    因为源码文件时GBK,所以当你定义
    const char*[] aaa = "abc";
    这样的语句时,如果直接使用aaa在纯unicode库里就会出现乱码,但是我昨天这样使用的时候发现内存的数据却是unicode编码,这让我感到非常困惑
      

  5.   

    不,中文版的vs一直都是用GBK来保存文件格式的,所以它编写的常量字符串都是GBK,这一点在用一些纯unicode的库会出现乱码必须转码时可以明显看出来,倒是中间变量vs都是用的unicode
    VS源码可以用utf-8 unicode之类的
      

  6.   

    VS2008的话, 默认是UNICODE 即UTF16, 可以设置"多字符集"即ASCII.加_T表示会根据你的VS环境设置, 自动解析字符串为 UNICODE或者ASCII. 
    如果你的环境是UNICODE, 那么 _T("XXX") == L"XXX"
    如果你的环境是多字符集, 那么 _T("XXX") == "XXX"