- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我试图在 Windows 命令提示符中写出以下字符:ュ (U+FF6D)。
我能够看到使用 WriteConsoleW 写出的字符。如果我使用 WideCharToMultiByte 使用 CP_ACP 代码页(chcp 返回 932:日语),我也能够看到该字符。但是,当我尝试在 WriteConsoleW 成功打印的同一字符串上使用常规 wcout 时,它会阻塞。
当我执行 setlocale(LC_ALL, "") 时,它会打印 English_UnitedStates.1252(我安装时的默认代码页)。
为什么 wcout 失败而其他人都成功了?
注意:我重新启动机器以将其系统区域设置更改为日本日语
最佳答案
C++ iostreams 的默认语言环境始终是“C”语言环境。来自 C++03 标准,§27.4.2.3/4:
locale getloc() const;
If no locale has been imbued, a copy of the global C++ locale,
locale()
, in effect at the time of construction.
来自§22.1.1.2/1-2:
locale() throw();
Default constructor: a snapshot of the current global locale.
Constructs a copy of the argument last passed to
locale::global(locale&)
, if it has been called; else, the resulting facets have virtual function semantics identical to those oflocale::classic()
.
来自§22.1.1.5/4-6:
static const locale& classic();
The "C" locale.
Returns: A locale that implements the classic "C" locale semantics, equivalent to the value
locale("C")
.Notes: This locale, its facets, and their member functions, do not change with time.
由于 std::cout
和 std::wcout
具有静态存储持续时间,它们保证在调用 main
之前被初始化,因此将总是在应用程序启动时具有“C”语言环境;即,在执行过程中没有足够早的时间调用 locale::global
并更改 std::cout
和 std::wcout 的默认语言环境
。因此,如果您想使用非默认代码页,您必须始终自己注入(inject)全局流。
关于c++ - wcout 不写宽字符到命令提示符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5750884/
#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' 对。如果
我是一名优秀的程序员,十分优秀!