首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

关于编码的有关问题

2012-04-25 
关于编码的问题在windows下的win32控制台程序:int _tmain(int argc, _TCHAR* argv[]){//设置编码方式为chs

关于编码的问题
在windows下的win32控制台程序:

int _tmain(int argc, _TCHAR* argv[])
{
  //设置编码方式为chs
setlocale(LC_ALL, "chs");

  //将字符转换为宽字符
 char* g_cstr = "中文!";
int lengthOfWcs = MultiByteToWideChar( CP_ACP, 0, g_cstr, -1, NULL, 0 );
wchar_t* g_wcs = new wchar_t[ lengthOfWcs ];
MultiByteToWideChar( CP_ACP, 0, g_cstr, -1, g_wcs, lengthOfWcs );

  //输出宽字符, 这里输出是乱码, 不是对应的“中文”, 代码是没问题的。
wprintf(L" %ls \r\n", g_wcs);
delete g_wcs;
g_wcs = NULL; 

system("pause");
return 0;
}
请教大家, setlocale那里的chs应该改成什么,我知道可以用“”解决(系统默认),但这样的话,是不是移植到别人电脑就有问题了?
如果不用系统默认的话, 应该改成什么才是对的, 在msdn上,找不到答案。。。

[解决办法]
建议改成 。936 即是GBK
[解决办法]
wchar_t* g_wcs = new wchar_t[ lengthOfWcs ];
改为
wchar_t* g_wcs = new wchar_t[ lengthOfWcs +1];
字符串的最后结尾保证为'\0'
[解决办法]
wchar_t* g_wcs = new wchar_t[ lengthOfWcs +1];
g_wcs[lengthOfWcs]=L'\0';//字符串的最后结尾保证为L'\0' 
 

热点排行