char16_t印刷

NoS*_*tAl 11 printing cout wchar-t c++11 char16-t

最近我将Windows应用程序移植到Linux时出现问题,因为wchar_t这些平台之间存在大小差异.我试图使用编译器开关,但打印这些字符时出现问题(我认为GCC wcout认为所有wchar_t都是32位).

所以,我的问题是:有一个很好的方法(w)cout char16_t吗?我问,因为它不起作用,我被迫将其投射到wchar_t:

cout << (wchar_t) c;
Run Code Online (Sandbox Code Playgroud)

这似乎不是一个大问题,但它让我烦恼.

How*_*ant 5

尝试一下:

#include <locale>
#include <codecvt>
#include <string>
#include <iostream>

int main()
{
    std::wstring_convert<std::codecvt_utf8_utf16<wchar_t> > myconv;
    std::wstring ws(L"Your UTF-16 text");
    std::string bs = myconv.to_bytes(ws);
    std::cout << bs << '\n';
}
Run Code Online (Sandbox Code Playgroud)

  • 所以你是说没有可以打印 char16_t 的 std 函数?我的意思是没有转换...这很奇怪,尤其是如果你考虑到他们花了宇宙年龄的一半来完成 c++0x 修订版。 (15认同)
  • 哦,口水战……就像我说的,这不是核心语言功能,你无法打印出其中一种内置类型,这既令人悲伤又有趣。boost 是否有内置打印 char16_t 的函数? (5认同)
  • 是的,如果只有 `#include &lt;codecvt&gt;` 能够真正与 `gcc` 一起工作,那就太好了;) (4认同)
  • 我们正在等待您设计、测试、实施、获得现场经验、提出建议,然后通过标准化流程引导建议。我们正忙着做其他事情。 (3认同)