【问题标题】:wcout will not print right single quotation mark [duplicate]wcout 不会打印右单引号 [重复]
【发布时间】: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 &lt;&lt; L"Parents’s Name";。注意“L”。
  • @MarkRansom 我已经尝试过了,抱歉,我错误地将我在代码中的 cout 测试行粘贴到了 wcout 中。将更新帖子。
  • 那我试试@aschepler 的建议:std::wcout &lt;&lt; L"Parents\u2019s Name";

标签: c++ string unicode


【解决方案1】:

假设操作系统是Windows,设置控制台模式支持宽字符:

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

int main(){
    _setmode(_fileno(stdout), _O_U16TEXT);
    std::wcout << L"Parents’s Name";
}

输出:

Parents’s Name

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-05-09
    • 1970-01-01
    • 2013-03-09
    • 2015-11-17
    • 2020-02-06
    • 1970-01-01
    • 1970-01-01
    • 2020-01-20
    相关资源
    最近更新 更多