C++ 控制台程序中输出UTF8字符乱码问题解决方法

2018-04-2710:41:26来源:yunshouhu 评论 3,044 views

1. 使用代码纠正

  1. // 控制台显示乱码纠正
  2. system("chcp 65001"); //设置字符集 (使用SetConsoleCP(65001)设置无效,原因未知)
  3. CONSOLE_FONT_INFOEX info = { 0 }; // 以下设置字体
  4. info.cbSize = sizeof(info);
  5. info.dwFontSize.Y = 16; // leave X as zero
  6. info.FontWeight = FW_NORMAL;
  7. wcscpy(info.FaceName, L"Consolas");
  8. SetCurrentConsoleFontEx(GetStdHandle(STD_OUTPUT_HANDLE), NULL, &info);

 

2. 不使用代码

手动启动一个控制台程序,启动之后设置编码为utf8

命令:chcp 65001

然后,设置字体为Consolas

代码例子:

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <wchar.h>
  4. #ifdef _WIN32
  5.     #include <Windows.h>
  6. #endif
  7. /**
  8.  为保证控制台程序输出中文不乱码:
  9.   1、xxx.c xxx.cpp使用utf-8编码,来支持linux和window的中文。
  10.   2、window cmd需要进行下面设置
  11.  */
  12. int main(void)
  13. {
  14. #ifdef _WIN32
  15.     //http://m.blog.csdn.net/article/details?id=52789570
  16.     //控制台显示乱码纠正
  17.    // system("chcp 65001"); //设置字符集(使用SetConsoleCP(65001)设置无效,原因未知)
  18.     SetConsoleOutputCP (65001);
  19.     CONSOLE_FONT_INFOEX info = { 0 }; // 以下设置字体来支持中文显示。
  20.     info.cbSize = sizeof(info);
  21.     info.dwFontSize.Y = 16; // leave X as zero
  22.     info.FontWeight = FW_NORMAL;
  23.     wcscpy(info.FaceName, L"Consolas");
  24.     SetCurrentConsoleFontEx(GetStdHandle(STD_OUTPUT_HANDLE), NULL, &info);
  25. #endif
  26.     printf("Hello World!\n");
  27.     printf("测试中文!\n");
  28.     printf("我是中文!\n");
  29.     printf("Hello World!\n");
  30.     getchar();
  31.     return 0;
  32. }