你木有听懂我的意思,我经过测试,发现在两种字符集下,
char ch1[100] = "abc中国";
在内存中写入的数据都是
61 62 63 D6 D0 B9 FA 00,我的疑问是为什么unicode字符集下写入的数据不是61 00 62 00 63 00 2D 4E FD 66 00 00呢

解决方案 »

  1.   

    unicode编码中的字符是全球唯一的。而多字节中的编码只针对特定字符集才有意义,因为不同字符集中相同的编码可能对应着不同的字符,比如中文字符集中的”中国“编码可能在日文字符集对应的是其它文字。
      

  2.   

    你木有听懂我的意思,我经过测试,发现在两种字符集下,
    char ch1[100] = "abc中国";
    在内存中写入的数据都是
    61 62 63 D6 D0 B9 FA 00,我的疑问是为什么unicode字符集下写入的数据不是61 00 62 00 63 00 2D 4E FD 66 00 00呢我还真让你说糊涂了
    你说的内存是哪里
      

  3.   

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

  4.   

    你木有听懂我的意思,我经过测试,发现在两种字符集下,
    char ch1[100] = "abc中国";
    在内存中写入的数据都是
    61 62 63 D6 D0 B9 FA 00,我的疑问是为什么unicode字符集下写入的数据不是61 00 62 00 63 00 2D 4E FD 66 00 00呢我还真让你说糊涂了
    你说的内存是哪里
    char ch1[100] = "abc中国";
    我说的内存是用fwrite()向记事本里面写入数据:ch1[100];
    然后通过ue打开看到的16进制表示:61 62 63 D6 D0 B9 FA 00;
    两种字符集下fwrite()向记事本写入的数据都是:61 62 63 D6 D0 B9 FA 00;
    这就是我疑惑的地方,为什么unicode字符集下写入的数据不是61 00 62 00 63 00 2D 4E FD 66 00 00呢?更直观一点,字符集的差异在哪里才会体现?
      

  5.   

    问题再提炼一下:
    不论在多字符集还宽款字符集下,
    "abc中国"是以多字符集的方式存放:61 62 63 D6 D0 B9 FA 00;
    而L"abc中国"是以宽字符集的方式存放:61 00 62 00 63 00 2D 4E FD 66 00 00
    这个说法对吗?
      

  6.   

    char ch1[100] = "abc中国";   
    wchar_t ch2[100] = L"abc中国";你这里已经显式的决定了他们分别是什么字符集的字符串,前者是多字节字符集的字符串,后者是宽字节字符集(Unicode)的字符串。这个不会受工程的字符集设置所影响。会受工程的字符集设置影响的是
    TCHAR ch[100] = _T("abc中国");这样,当工程设置为多字节字符集时,这个ch和上面的ch1是一样的,当工程设置为宽字节字符集(Unicode)时,这个ch和上面的ch2是一样的。