我想用VC2003写一个UNICODE的程序,
由于这个源代码里面可能会出现多国的文字(比如汉语和韩语),
为了避免在IDE环境里出现乱码,我想吧源代码(*.h和*.cpp)保存为Unicode格式,在SDI工程中,这个问题我已经解决,
见:
但是,在控制台程序中,虽然编译连接都没有问题,
但在窗口中的显示却不正确(源代码见下面).
我估计是控制台窗口的语言或者字符集设置不对,但不知道怎么弄.请大家积极支招.// 本程序中包含多种语言的字符串
// 在VC2003编译通过
// 本文件保存方式为
// 编码: Unicode (2000)
// 换行: Windows (CR LF)
// 但是在窗口中显示不正确
// 不能正确显示除了英语字母和汉字以外的其他字符.#include "stdafx.h"
using namespace std;int _tmain(int argc, _TCHAR* argv[])
{
wchar_t strData[][64] = {
L"/*",
L"China(Simplified): 中国(简体)",
L"China(Traditional): 中國(繁體)",
L"Korea: 한국",
L"Russia: Россия",
L"Saudi Arabia: المملكه العربية السعودية",
L"*/"
};

locale loc("chs");
wcout.imbue(loc);
int iCount = sizeof(strData)/sizeof(strData[0]);
for(int i = 0; i < iCount; ++i)
{
wcout << strData[i] << endl;
}
return 0;
}

解决方案 »

  1.   

    在SDI工程中,这个问题我已经解决, 
    见: http://blog.csdn.net/iicup/archive/2008/02/02/2078037.aspx
      

  2.   

    对于韩语,SetConsoleOutputCP就不能用936了。
    另外,强烈建议,把这些字符移到资源文件中,在source code中出现中文很不professional,而且问题很多
      

  3.   

    非常感谢
    SetConsoleOutputCP
    等效于上面的
    locale   loc("chs"); 
    wcout.imbue(loc);
    是吧?那就是说我必须把这个字符串分成几个部分,
    每个部分使用不同的SetConsoleOutputCP吗?
      

  4.   

    To: aspnetwuxueyou
    我知道
    在source code中出现中文很不professional
    我现在的情况是,我这里有一些原来韩国朋友写的代码,
    所有注释和部分字符串是韩文
    (就象我们写的程序带有一些中文, 当然很不professional,但是老板从$的角度看,这种东西现在和将来都还会大量涌现),
    而我是用的简体中文环境.
    所以我才想用这个方法.
      

  5.   

    其实我的string已经统一到Unicode了,
    实际上应该已经不存在codepage问题才对呀.....
    莫非printf需要在显示的时候把unicode转成MBCS ??
      

  6.   

    是你的控制台窗口。控制台窗口的codepage。
      

  7.   

    936的console就不能显示trade和copyright字符,而1252就可以。
    所以,我认为936窗口显示韩文可能会有问题,要设置为949.codepage列表,可参考
    http://www.devdiv.net/topic.asp?ARCHIVE=true&TOPIC_ID=825&SearchTerms=codepage
      

  8.   

    控制台窗口都有current code page。
    SetConsoleOutputCP就是设置控制台窗口的code page.
      

  9.   

    能不能把current   code   page设置成 unicode 呢?
      

  10.   

    程序中:system("chcp +你所需要的codepage代码");直接在cmd里使用chcp命令进行修改还没有试过。
      

  11.   

    1200
    Unicode UCS-2 Little-Endian (BMP of ISO 10646)这个应该是Unicode可是:
    C:\> chcp 1200
    无效代码页在程序中用 ".1200" 会出异常.
    ........我用的 WinXP SP2,
    难道我还需要安装什么组件?
      

  12.   

    这个好象是 wcout 的缺陷,
    它好象确实是把 unicode 转成 ansi 然后调用操作系统 A 系列函数,
    操作系统再把ANSI 转成 unicode 然后显示.
      

  13.   

    我直接用ConsoleWriteW结果还是一样,
    但我修改字体为"新宋体" 后,
    Saudi   Arabia:   المملكه   العربية   السعودية", 
    正常了
    但韩语还是显示不出来,变成了 口口口
    看来字体也有问题
      

  14.   

    在输出字体前,先设置对应的codepage,至少控制台是这样的。
      

  15.   

    理论上CRT是不支持真正意义的unicode 输出的
    应该用Windows API WriteConsoleW详细请看:
    http://www.cppblog.com/sandy/archive/2006/06/21/8779.html