- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在阅读著名的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_t
与 L
前缀字符串文字一起使用。在 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/
#include #include using namespace std; int main() { wcout basic_ostream& operator& out, c
本质上,稍微修改一下代码“Hello World”应该可以正常工作 #include #include using namespace std; int main(){ wcout<
这个问题在这里已经有了答案: How can I output these symbols in c++ (2 个答案) 关闭 3 年前。 我很惊讶地看到 std::wcout 不会在字符串中打印正
如何在消息框中显示文件名和一些字符串? 我使用这段代码: wcout<
我一直在尝试为项目编写 C++ 应用程序,但遇到了这个问题。基本上: class OBSClass { public: wstring ClassName; uint8_t Credi
我试图在 Windows 命令提示符中写出以下字符:ュ (U+FF6D)。 我能够看到使用 WriteConsoleW 写出的字符。如果我使用 WideCharToMultiByte 使用 CP_AC
我在控制台应用程序中使用 wcout 时注意到一个奇怪的问题。 调用某个函数后,其余的wcout调用根本不起作用。即输出语句没有出现在控制台上。 我注意到在函数中,我使用了一个从未分配过的宽字符数组。
我使用 wcin 是为了在 wchar_t 中存储单个字符。然后我尝试使用 wcout 调用和法语字符 'é' 打印它:但我无法在我的控制台上看到它。 我的编译器是 g++ 4.5.4,我的操作系统是
这是 this question 的一种重复.我遵循了建议(我认为)并包含了 但是我的脸上出现了完全相同的错误: error C2679: binary ' #include using names
一段时间以来,我一直在用这个问题撞墙。我只是想制作一个简单的应用程序来读取文件的内容。下面是一些代码: errno_t error; if ((error = fopen_s(&f, file, "r
我正在读取一个 UTF-8 编码的 unicode 文本文件,并将其输出到控制台,但显示的字符与我用来创建该文件的文本编辑器中的字符不同。这是我的代码: #define UNICODE #includ
问题是 MinGW 编译的程序在通过 wcout 在控制台上打印非 ascii 字符时存在问题,输出可能显示来自不同代码页的字符或完全空白。但是 winapi WriteConsoleW 工作得很好。
这个问题在这里已经有了答案: Can a local variable's memory be accessed outside its scope? (20 个答案) How to return
我尝试用 C++ 重新创建 Windows Reg.exe 实用程序。具体来说,在 REG.exe 中完成以下命令所带来的功能。 REG QUERY "HKLM\Software" /s 但是,当我将
我正在阅读“C++ Cookbook”,其中包含以下片段: // cout << s << std::endl; // You shouldn't be able to wcout << ws
我想在 Ubuntu 20.04 上读取一个 txt 编码的 UTF8 文件。 我在 wcout cout 和 ifstream 中添加了一个语言环境 fr_FR.UTF-8。 我在想只添加语言环境就
我正在尝试使用 unicode 字符在终端中绘制一些简单的方框图。但是我注意到 wcout 不会为方框图字符输出任何内容,甚至不会输出占位符。所以我决定编写下面的程序并找出支持哪些 unicode 字
这个问题在这里已经有了答案: What does the 'L' in front a string mean in C++? (7 个答案) 关闭 8 年前。 有什么区别 std::wcout <
为什么 std::wcout #include int main() { std::locale::global (std::locale ("en_US.UTF-8")); st
我有一个名为“提示”的 std::map,声明如下: std::map, std::allocator >> prompts; 它存储 int 'key' 和 wstring 'value' 对。如果
我是一名优秀的程序员,十分优秀!