我想用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;
}
由于这个源代码里面可能会出现多国的文字(比如汉语和韩语),
为了避免在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;
}
解决方案 »
- CRichEditCtrl和数据库交互!
- CDialog与CFormView中的坐标问题。
- 高分求教,如何实现网页点击超链接打开realplayer的效果
- 请问如何才能够将ctabctrl控件的item放在控件的底部啊?
- 怎样恢复VSS?
- ## 请问如何使自己的控件和系统的风格一致,例如在XP下和在98下##
- VC在DEBUG时如何转向汇编那边?
- 为什么用MemBmp和*MemBmp画出的矩形颜色不同?
- 重分求解!!!80分!!!如何捕捉数据库异常!!!
- 现在招VC的都做什么开发
- GetAsyncKeyState函数的一个小问题
- 怎么实现非模态的子对话框和父对话框 谁被激活 谁在前面。。~~下面代码无效。。
见: http://blog.csdn.net/iicup/archive/2008/02/02/2078037.aspx
另外,强烈建议,把这些字符移到资源文件中,在source code中出现中文很不professional,而且问题很多
SetConsoleOutputCP
等效于上面的
locale loc("chs");
wcout.imbue(loc);
是吧?那就是说我必须把这个字符串分成几个部分,
每个部分使用不同的SetConsoleOutputCP吗?
我知道
在source code中出现中文很不professional
我现在的情况是,我这里有一些原来韩国朋友写的代码,
所有注释和部分字符串是韩文
(就象我们写的程序带有一些中文, 当然很不professional,但是老板从$的角度看,这种东西现在和将来都还会大量涌现),
而我是用的简体中文环境.
所以我才想用这个方法.
实际上应该已经不存在codepage问题才对呀.....
莫非printf需要在显示的时候把unicode转成MBCS ??
所以,我认为936窗口显示韩文可能会有问题,要设置为949.codepage列表,可参考
http://www.devdiv.net/topic.asp?ARCHIVE=true&TOPIC_ID=825&SearchTerms=codepage
SetConsoleOutputCP就是设置控制台窗口的code page.
Unicode UCS-2 Little-Endian (BMP of ISO 10646)这个应该是Unicode可是:
C:\> chcp 1200
无效代码页在程序中用 ".1200" 会出异常.
........我用的 WinXP SP2,
难道我还需要安装什么组件?
它好象确实是把 unicode 转成 ansi 然后调用操作系统 A 系列函数,
操作系统再把ANSI 转成 unicode 然后显示.
但我修改字体为"新宋体" 后,
Saudi Arabia: المملكه العربية السعودية",
正常了
但韩语还是显示不出来,变成了 口口口
看来字体也有问题
应该用Windows API WriteConsoleW详细请看:
http://www.cppblog.com/sandy/archive/2006/06/21/8779.html