gpt4 book ai didi

c++ - 我尝试使用 wchar_t、char16_t 和 char32_t 类型打印汉字,但无济于事。

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:28:55 25 4
gpt4 key购买 nike

我正在尝试使用 wchar_tchar16_tchar32_t 类型打印汉字 ,没有成功(live example)

#include <iostream>
int main()
{
char x[] = "中"; // Chinese character with unicode point U+4E2D
char y[] = u8"中";
wchar_t z = L'中';
char16_t b = u'\u4e2d';
char32_t a = U'\U00004e2d';

std::cout << x << '\n'; // Ok
std::cout << y << '\n'; // Ok
std::wcout << z << '\n'; // ??
std::cout << a << '\n'; // prints the decimal number (20013) corresponding to the unicode point U+4E2D
std::cout << b << '\n'; // " " "
}

最佳答案

由于您在 Linux 系统上运行测试,源代码是 UTF-8,这就是为什么 xy是一样的东西。这些字节被 std::cout << x 原封不动地分流到标准输出中和 std::cout << y , 当您查看网页时(或当您查看 linux 终端时),您会看到预期的字符。

std::wcout << z如果你做两件事就会打印出来:

std::ios::sync_with_stdio(false);
std::wcout.imbue(std::locale("en_US.utf8"));

在不与 C 取消同步的情况下,GNU libstdc++ 通过 C IO 流,它永远不会在同一流上打印窄字符后打印宽字符。 LLVM libc++ 似乎甚至可以同步工作,但当然仍然需要 imbue 来告诉流如何将宽字符转换为它发送到标准输出的字节。

打印ba ,您必须将它们转换为宽或窄;即使有 wbuffer_convert设置 char32_t 流需要大量工作。它看起来像这样:

std::wstring_convert<std::codecvt_utf8<char32_t>, char32_t> conv32;
std::cout << conv32.to_bytes(a) << '\n';

将它们放在一起:http://coliru.stacked-crooked.com/a/a809c38e21cc1743

关于c++ - 我尝试使用 wchar_t、char16_t 和 char32_t 类型打印汉字,但无济于事。,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31571430/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com