为了账号安全,请及时绑定邮箱和手机立即绑定

在Windows中使用C ++将Unicode输出到控制台

在Windows中使用C ++将Unicode输出到控制台

C++
Cats萌萌 2019-10-31 13:01:13
我仍在学习C ++,所以请耐心接受我和草率的代码。我使用的编译器是Dev C ++。我希望能够使用cout将Unicode字符输出到控制台。每当我尝试类似的事情:#include <iostream>int main(){    std::cout << "Hello World!\n";    std::cout << "Blah blah blah some gibberish unicode: ĐĄßĞĝ\n";    system("PAUSE");    return 0;}它将奇怪的字符输出到控制台,例如µA■Gg。为什么这样做,我如何显示ĐĄßĞĝ?还是Windows无法做到这一点?
查看完整描述

3 回答

?
慕桂英3389331

TA贡献2036条经验 获得超8个赞

那std::wcout呢


#include <iostream>


int main() {

    std::wcout << L"Hello World!" << std::endl;

    return 0;

}

这是标准的宽字符输出流。


但是,正如Adrian指出的那样,这并不能解决事实cmd,默认情况下,它不处理Unicode输出。可以通过手动配置控制台来解决,如Adrian的答案中所述:


启动cmd与/u论证;

调用chcp 65001更改输出格式;

并在控制台中设置unicode字体(如Lucida Console Unicode)。

您也可以尝试使用_setmode(_fileno(stdout), _O_U16TEXT);,它需要fcntl.h和io.h(如本答案所述,并在本博客文章中进行了记录)。


查看完整回答
反对 回复 2019-10-31
?
紫衣仙女

TA贡献1839条经验 获得超15个赞

我不确定Windows XP是否会完全支持您的需求。要使用命令控制台启用Unicode,需要做三件事:

  1. 使用来启动命令窗口cmd /u。该/u说您的程序将输出Unicode。

  2. 使用chcp 65001指示要使用UTF-8,而不是代码页中的一个。

  3. 选择具有更多字形覆盖范围的字体。Windows的较新版本中的命令窗口提供了Lucida Console Unicode。我的XP盒中有一个子集,称为Lucida Console。它没有非常丰富的曲目,但是如果您只想显示一些带有重音符号的字符,就足够了。


查看完整回答
反对 回复 2019-10-31
?
LEATH

TA贡献1936条经验 获得超6个赞

这基本上是正确的,但是... cmd确实在默认情况下将Unicode输出处理到控制台,但是在重定向到文件时不处理。使用/u它还可以将Unicode输出到重定向文件。在这两种情况下,“ Unicode”均表示UTF-16Windows上的通常情况。chcp 65001设置不与宽字符对应的ANSI代码页,和。您无需将代码页设置为UTF-8即可输出UTF16!此外,该API在之下被破坏了。如果要输出超出ANSI代码页的字符,则此调用非常重要且必不可少!UTF-8wcoutcmd /uWriteFile()chcp 65001_setmode()

查看完整回答
反对 回复 2019-10-31
  • 3 回答
  • 0 关注
  • 399 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信