为什么输入法输出的是CP936而不是UNICODE?
我用 谷歌拼音、微软拼音2003、极点五笔测试,发现两个问题,比较困惑,望高手解答。
1.输入法输出的字符是什么格式?在记事本、VC6的.cpp文件中输入字符通过ultraedit查看得到的都是CP936的代码,这是因为输入法直接输出的就是CP936还是因为编辑器改的?
2.在如下程序中,
int main ()
{
unsigned short* str = L"ÎÒû×í!";
//char* str = "ÎÒû×í!";
return 0;
}
注:这是直接从VC6贴进来的 乱码处为“我没醉!”,最后一个感叹号用英文输入法输入的。
我看了str的汇编,
在str为unsigned short*和char*时,汇编代码是一样的,但是内存却不一样:
在str为unsigned short*时:
asm:
40: unsigned short* str = L"ÎÒû×í!";
00401668 mov dword ptr [ebp-4],offset string L"\x6211\x6ca1\x9189!" (0042f020) //UNICODE
memory:
0042F020 11 62 A1 6C 89 91 21 .b¡l‰‘! //UNICODE
0042F027 00 00 00 00 00 50 08 .....P.
在str为char* 时:
asm:
41: char* str = "ÎÒû×í!";
00401668 mov dword ptr [ebp-4],offset string L"\x6211\x6ca1\x9189!" (0042f020) //UNICODE
memory:
0042F020 CE D2 C3 BB D7 ED 21 ÎÒû×í! //CP936
0042F027 00 00 00 00 00 50 08 .....P.
在1中我说过.cpp里面也是CP936,可是这里在asm里面都是UNICODE了,为什么?内存为什么又会是这样?
谢谢!!