我想使用wcout显示一个包含阿拉伯语和中文的消息。
以下代码是正确的:
以下代码是正确的:
#include <iostream>
using namespace std;
int main()
{
wcout.imbue(locale("chs"));
wcout << L"中文"; // OK
}
然而,下面的代码无法正常工作:
#include <iostream>
using namespace std;
int main()
{
wcout.imbue(locale(/* What to place here ??? */));
wcout << L"أَبْجَدِيَّة عَرَبِيَّة中文"; // Output nothing. VC++ 2012 on Win7 x64
// Why does the main advantage of unicode not apply here?
}
在采用unicode之后,我认为代码页的概念应该被废弃。
Q1. wout是如何显示这段文字的机制?
Q2. 作为一个基于unicode的操作系统,为什么Windows不支持在其控制台窗口中输出unicode字符?
_O_U16TEXT
、_O_U8TEXT
或_O_WTEXT
确实足以启用Unicode模式。要能够看到结果,必须使用UNICODE代码页(在cmd中执行“chcp 65001”)。最后一个要求是在控制台中使用可以显示结果的字体,这对于普通计算机来说是最复杂的,因此唯一安全的方法将是将结果导出到文件中,这只在很少的情况下真正有用。 - Oleg