【发布时间】:2020-02-25 03:22:39
【问题描述】:
我很惊讶std::wcout 不会在字符串中打印右单引号,实际上它会崩溃。之后没有其他任何内容打印到控制台。
std::wcout << L"Parents’s Name";
请注意,有问题的字符看起来像撇号,但不是,它被称为右单引号,其 unicode 值为 0x2019。
如果我改用cout,它会在其位置打印错误的字符,但会打印字符串的其余部分。但我正在使用 unicode 字符串,所以我很想知道为什么 wcout 不起作用。
如您所见,这并不是一个真正的特殊/控制字符,它可以是字符串的一部分。有什么办法可以打印出来吗?
【问题讨论】:
-
像这样使用代码中的字符,您需要确保文件编码与编译器期望的相同。要查看是否是问题所在,您可以尝试将字符替换为
\u2019并查看它的行为。 -
@aschepler 我也将它写入一个文件,并确保编码是 unicode UCS-2 BOM(根据 notepad++),但结果相同。打印在该字符处停止,没有其他内容写入文件。
-
试试
std::wcout << L"Parents’s Name";。注意“L”。 -
@MarkRansom 我已经尝试过了,抱歉,我错误地将我在代码中的 cout 测试行粘贴到了 wcout 中。将更新帖子。
-
那我试试@aschepler 的建议:
std::wcout << L"Parents\u2019s Name";