C++ Mac 终端中不显示 Unicode



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

最新更新