Terminal > Profiles > Advanced > Text encoding
设置为Unicode (UTF-8)
。
Terminal > Profiles > Advanced > Set locale environment variables on startup
被选中。
Terminal > Profiles > Advanced > Unicode East Asian Ambiguous characters are wide
被选中(我也尝试过未选中 - 两者都给出相同的结果)。
在终端配置文件中选择的字体与中文字符兼容 - 我已经检查过了。
我通过终端本身检查了locale
,它给出了以下内容:
LANG="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_CTYPE="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_ALL="en_US.UTF-8"
-- 我不确定这是否是问题所在,因为它说en_US
但也说UTF8
,这是我输入的字符的编码。
为了测试所有这些,我使用了以下代码:
char dao [4] = "u9053";
std::wcout << "Character: " << dao << std::endl;
wchar_t wdao[] = L"道";
std::wcout << "Character 2: " << wdao << std::endl;
起初,这些角色是问号,但现在他们根本没有出现。如果我把所有这些行放到一个程序中,显示的只是Character:
- 它永远不会进入第二行,它不显示汉字,也没有给出任何错误。
我已经尝试过setlocale();
但它没有帮助。
我还确保C++代码的源文件设置为 Unicode UTF-8
。
有什么想法吗?我在这里缺少什么吗?
更新:我可以通过此方法获取要在终端中显示的字符:
char dao [4] = "道";
std::cout << "Character: " << dao << std::endl;
char dao2 [4] = "u9053";
std::cout << "Character: " << dao2 << std::endl;
也就是说,我永远无法让它与wchar_t
一起工作而不是char[]
.我想这已经足够好了,因为它的功能,但是,如果有人知道使用wchar_t
的问题是什么,我将不胜感激,以便将来参考。
没有<<运算符将窄字符串输出到wostream(例如wcout)。
这就是您在第一种情况下正在做的事情,您声明
char dao [4] = "u9053";
然后尝试将其输出到 std::wcout