环境:中午WinXP操作系统,VC6.0英文版编译选项加入:_MBCS, 资源(Resource)语言为俄语。StringTable有一个字符串:
IDS_UTEST "управление отпечатани" //俄语程序如下:CString str;str.LoadString(IDS_UTEST);
//这里就出错了
//str中的内容出现了乱码为:§е§б§в§С§У§Э§Ц§Я§Ъ§Ц §а§д§б§Ц§й§С§д§С§Я§Ъ请问该如何解决?程序界面可以正常显示俄语。
比如:
CString str = _T("управление отпечатани");
然后把它显示到窗口的话不会是乱码。
IDS_UTEST "управление отпечатани" //俄语程序如下:CString str;str.LoadString(IDS_UTEST);
//这里就出错了
//str中的内容出现了乱码为:§е§б§в§С§У§Э§Ц§Я§Ъ§Ц §а§д§б§Ц§й§С§д§С§Я§Ъ请问该如何解决?程序界面可以正常显示俄语。
比如:
CString str = _T("управление отпечатани");
然后把它显示到窗口的话不会是乱码。
显示unicode字符串会出问题。
把多字节转化成unicode,然后显示。
MultiByteToWideChar
比如:
CString str = _T("управление отпечатани");
然后把它显示到窗口的话不会是乱码。
问题出在CString::LoadString()函数,取的字符串内容发生了变化。
多字节字符串和unicode字符串之间需要转换
然后在StringTable里添加一个字符串,id为IDS_STR_RUS,Caption为управление отпечатани然后在
BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
{
if( !CFrameWnd::PreCreateWindow(cs) )
return FALSE;
// TODO: Modify the Window class or styles here by modifying
// the CREATESTRUCT cs CString str;
str.LoadString(IDS_STR_RUS);
AfxMessageBox(str); return TRUE;
}显示的字符串正常啊。
你把语言修改之后STringTable就变成乱码了:“箫疣怆屙桢 铗镥鬣蜞龛”。
把文字再修改为:"управление отпечатани”,在LoadString的时候就出错了。
真的很感谢你么热心的帮助我。