CStringA=ANSI是吗?
CStringW=Unicode是吗?char*=ANSI是吗?
wchar_t*=Unicode是吗?CStringA<->CStringW怎么办?
CStringA<->char*怎么办?
CStringW<->wchar_t*怎么办?CStringW<->char*可以吗?
CStringA<->wchar_t*可以吗?char*<->wchar_t*可以吗?那UTF-8又是用什么标识符声明的变量?

解决方案 »

  1.   

    C++11中,utf-8也是一种多字节编码方法, 基本跨度也是一字节所以用char*,
    const char* utf8_string = u8"汉字";
    utf-8也是一种Unicode, windows上面的Unicode其实是utf-16,
    因为windows本身API没有utf8版本, 所以需要转换, 当然,utf几个互相转换的
    代码非常简单, 大部分人都能写,所以一般转换效率要高.wchar_t 是c/c++宽字符类型, 标准并未规定其实际编码方式,像
    c++11具体规定的utf-8, utf-16, utf-32字符()就强制规定了编码方式
        auto a = u8'U';
        auto b = u'T';
        auto c = U'F';
    a -> char, b -> char16_t, c-> char32_t
      

  2.   

    unicode是概念,是抽象,具体实现有utf8,utf16, utf32,其中windows核心是utf16-little-endian格式的。CString的东西不爱用,因为以前没有CStringA和W的区别,至今已经完全不用这个类了。
      

  3.   

    CSingA 和 CSgingW 用 = 操作符 就可以互相转化, 
      

  4.   

    前面是对的。不同字符集用CA2W和CW2A转换
      

  5.   

    对电脑而言没有乱码,只有二进制字节;对人脑才有乱码。啊 GBK:0xB0 0xA1,Unicode-16 LE:0x4A 0x55,Unicode-16 BE:0x55 0x4A,UTF-8:0xE5 0x95 0x8A
      

  6.   

    CStringA和CStringW可以直接互转,内部自动转换编码,当然早期VS没有这个功能CStringA和char*可以直接用,操作符重载和构造函数重载保证了这一点CStringW和wchar_t*可以直接用,理由同上char*和wchar_t*的互转可以利用第一条,转换过程:char* -> CStringA -> CStringW -> wchar_t*
    也可以用宏 wstr = CA2W(cstr)   cstr = CW2A(wstr)