环境:中午WinXP操作系统,VC6.0英文版编译选项加入:_MBCS,  资源(Resource)语言为俄语。StringTable有一个字符串:
IDS_UTEST    "управление отпечатани" //俄语程序如下:CString str;str.LoadString(IDS_UTEST);
//这里就出错了
//str中的内容出现了乱码为:§е§б§в§С§У§Э§Ц§Я§Ъ§Ц §а§д§б§Ц§й§С§д§С§Я§Ъ请问该如何解决?程序界面可以正常显示俄语。
比如:
CString str = _T("управление отпечатани");
然后把它显示到窗口的话不会是乱码。

解决方案 »

  1.   

    编译选项是多字节的。
    显示unicode字符串会出问题。
    把多字节转化成unicode,然后显示。
    MultiByteToWideChar
      

  2.   

    程序界面可以正常显示俄语。
    比如:
    CString str = _T("управление отпечатани");
    然后把它显示到窗口的话不会是乱码。
    问题出在CString::LoadString()函数,取的字符串内容发生了变化。
      

  3.   

    LoadString加载的是多字节字符串,这是由预编译选项_MBCS决定的。
    多字节字符串和unicode字符串之间需要转换
      

  4.   

    把编译选项改成_UNICODE,结果还是一样,真的晕了
      

  5.   

    我做了一个单文档,编译选项为_MBCS,
    然后在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;
    }显示的字符串正常啊。
      

  6.   

    忘记说了,STringTable 语言为Russian 不是P.R.C。
    你把语言修改之后STringTable就变成乱码了:“箫疣怆屙桢 铗镥鬣蜞龛”。
    把文字再修改为:"управление отпечатани”,在LoadString的时候就出错了。
    真的很感谢你么热心的帮助我。
      

  7.   

    那就把工程改为Unicode的,在VC++6.0中,C/C++,Preprocessor difinitions 去除_MBCS,加_UNICODE,UNICODE;在ProjectSetting/link/output 中设置Entry为wWinMainCRTStartup。反之为MBCS(ANSI)编译。
      

  8.   

    to xuxingok  :不起作用阿!
      

  9.   

    to jacklzw88 : 怎么改法?
      

  10.   

    jacklzw88  能不能详细说一下啊。
      

  11.   

    我跟楼主一样的问题,我看别人的exe,用工具一读取,里面的字符串有中英台三种语言,那应该用loadstring没问题,但是我自己加了个泰语就有问题了,期待。。
      

  12.   

    http://blog.csdn.net/superdiablo/archive/2008/03/19/2197202.aspx