gpt4 book ai didi

c++ - C++ 怎么能 wcout utf-16 编码的 char 数组?

转载 作者:行者123 更新时间:2023-11-30 02:19:38 24 4
gpt4 key购买 nike

我正在阅读著名的answer关于 string 和 wstring 并引起一些混淆。

source charset和execution charset均设置为utf-8,Windows x64,VC++编译器,git bash console(可打印unicode字符),系统默认codepage 936(GB2312)。

我的实验代码:

#include <cstring>
#include <iostream>
using namespace std;
int main(int argc, char* argv[])
{
wchar_t c[] = L"olé";
wchar_t d[] = L"abc";
wcout << c << endl;
wcout << d << endl;

return 0;
}

可以打印“abc”但不能打印“é”。

我知道 wchar_tL 前缀字符串文字一起使用。在 Windows 下 wchar_t 是用 UTF-16 编码的(它是硬编码的吧?无论我选择什么源字符集或执行字符集,L"abc" 总是相同的UTF-16 代码单元)。

问题是:如何wcout一个UTF-16编码的字符串("abc"),而我的源文件是utf-8,执行字符集是utf-8。该程序应该无法识别 UTF-16 编码的内容,除非我将所有内容都设置为 utf-16。

如果它能以某种方式打印 UTF-16,那为什么它不能打印 é

最佳答案

您需要一个非标准的 Windows 系统调用来启用 UTF-16 输出。

#include <iostream>
#include <io.h>
#include <fcntl.h>
#include <stdio.h>

int main()
{
_setmode(_fileno(stdout), _O_U16TEXT); // <=== Windows madness
std::wcout << L"olé\n";
}

请注意,在执行此操作后,您不能使用cout,只能使用wcout

另请注意您的源代码文件必须有BOM,否则编译器将无法将其识别为Unicode。

关于c++ - C++ 怎么能 wcout utf-16 编码的 char 数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50616620/

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