如何从Windows上的c ++控制台应用程序打印UTF-8

Pau*_*xon 19 c++ utf-8 console-application

对于在英语Windows(XP,Vista或7)上使用Visual Studio 2008编译的C++控制台应用程序.是否可以打印到控制台并使用cout或wcout正确显示UTF-8编码的日语?

Sla*_*lav 12

这应该有效:

#include <cstdio>
#include <windows.h>

#pragma execution_character_set( "utf-8" )

int main()
{
    SetConsoleOutputCP( 65001 );
    printf( "Testing unicode -- English -- ???????? -- Español -- ???????. aäbcdefghijklmnoöpqrsßtuüvwxyz\n" );
}
Run Code Online (Sandbox Code Playgroud)

不知道这是否会影响什么,但源文件被保存为Unicode的(UTF-8具有签名) -代码页65001FILE - >高级保存选项...

Project -> Properties -> Configuration Properties -> General -> Character Set设置为Use Unicode Character Set

有人说您需要将控制台字体更改为Lucida Console,但在我这边,它与ConsolasLucida Console 一起显示


dtb*_*dtb 8

Windows控制台默认使用OEM代码页来显示输出.

要将代码页更改为Unicode chcp 65001,请在控制台中输入,或尝试以编程方式更改代码页SetConsoleOutputCP.

请注意,您可能必须将控制台的字体更改为在unicode范围内具有字形的控制台.

  • 请注意,UTF-8作为代码页存在许多错误.大多数都是WONTFIX. (6认同)

sbi*_*sbi 5

以下是MVP Michael Kaplan关于如何通过控制台正确输出UTF-16的文章.您可以将UTF-8转换为UTF-16并输出.

  • 一个观察:迈克尔卡普兰不是MVP.我不知道他是不是.他多年来一直是微软员工(微软员工没有资格参加MVP计划). (3认同)
  • 固定链接:https://web.archive.org/web/20131118014725/http://blogs.msdn.com/b/michkap/archive/2008/03/18/8306597.aspx (2认同)

Ala*_*avi 0

在控制台中输入,chcp 65001将代码页更改为UTF-8。