【发布时间】:2017-09-14 19:08:43
【问题描述】:
一个简单的问题:我正在用 C++(但它主要是 C 风格)为一个类编写一个聊天室程序,并且我正在尝试打印“#help — 显示命令列表...”到输出窗口。虽然我可以使用两个连字符 (--) 来实现 大致 相同的效果,但我更愿意使用 em-dash (-)。但是,printf() 似乎不支持打印破折号。相反,控制台只是在其位置打印出字符ù,尽管直接在提示符中输入破折号可以正常工作。
如何让这个简单的 Unicode 字符显示出来?
查看 Windows alt 键代码,我发现 alt+0151 是“—”而 alt+151 是“ù”的方式很有趣。这与我的问题有关,还是一个简单的巧合?
【问题讨论】:
-
问题是 Windows 控制台使用代码页而不是 Unicode。
-
问题是 em-dash 是一个 unicode 字符,您尝试将其打印在 ascii 字符串中
-
试试这个 std::wcout stackoverflow.com/questions/33029906/…
-
@sata300.de 链接的答案是在许多情况下方便地执行此操作的关键,即在程序启动时调用
_setmode(_fileno(stdout), _O_U16TEXT)并使用宽字符C/C++ I/O,例如@987654324 @ 和std::wcout. -
@RichardCritten 的赞成评论可能只是措辞含糊。我认为它指的是控制台(例如conhost.exe)如何使用其当前输出代码页(即
GetConsoleOutputCP)解码写入它的字节。我不认为评论意味着控制台通常不支持 Unicode。尽管对于后者,控制台仅限于 BMP(例如,代理代码显示为默认字符,而不是解码 UTF-16 代理对);不支持组合码;并且需要带有字符字形的等宽字体(手动字体链接有帮助)。
标签: c++ c windows visual-studio windows-console