解决资源字符串乱码问题

来源:互联网 发布:c语言中scanf什么意思 编辑:程序博客网 时间:2024/05/16 06:51

 多语种资源的转换 
 语言资源转换问题
    不同国家的人使用着不同语言的操作系统,在Microsoft Windows 下,语言用代码页来识别,不同种类语言则用不同代码页来表示,如“简体中文”用代码页936表示,而"美国英语“则用代码页1252来表示。
    在用Visual C++开发应用程序时,与语种相关信息一般存储在资源文件(*.RC)中。因此,要编制不同语种的应用程序,实质上是要求编写出不同育种的资源文件。在编程时,我们可将不同语种的资源文渐编译成相应的动态连接库。这样,在实际使用时,可根据操作系统所使用代码页异同,选用相应语种的资源文件编译而成的动态连接库,即可使应用程序正常运行。这就是所谓的多国语言编程问题。
    如何进行资源转换
    下面以将资源文件从代码页936(见体中文)转换到代码页1252(美国英语)为例进行说明。即已有了一代码页为936的资源文件,在资源内容不变的情况下,如何将其转换为代码页为1252的资源文件。
    容易想到的但会带来灾难性后果的方法是,直接修改资源的属性。这种方法时,将Microsoft Visual C++的Workspace 窗口切换到Resource View,选中某项资源,单击右健,从弹处菜单中选择“Properties”命令,在弹处对话框中,修改Language项的值。但是,经过次中修改,再打开资源,会发现资源里的内容变成了一堆不可读的乱码。
    正确的方法是:以某文件编辑器打开资源文件,在其中查找"Language",找到后可看到入下所示:
    //Chinese (P.R.C) resources
    #if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_CHS)
    #ifdef _WIN32
    LANGUAGE LANG_CHINESE,SUBLANG_CHINESE_SIMPLIFIED
    #pragma code_page(936)
    #endif //_WIN32
    这段代码表示当前使用的代码页为936,所代表的语种为简体中文,将以下代码用如下代码替换:
    //English (U.S) resources
    #if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)
    #ifdef _WIN32
    LANGUAGE LANG_ENGLISH,SUBLANG_ENGLISH_US
    #pragma code_page(1252)
    #endif //_WIN32

原创粉丝点击