读书人

关于编码的有关问题

发布时间: 2012-04-25 19:32:32 作者: rapoo

关于编码的问题
在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'

读书人网 >C++

热点推荐