C++ 控制檯程式中輸出UTF8字元亂碼問題解決方法
阿新 • • 發佈:2018-12-30
1. 使用程式碼糾正
// 控制檯顯示亂碼糾正 system("chcp 65001"); //設定字符集 (使用SetConsoleCP(65001)設定無效,原因未知) CONSOLE_FONT_INFOEX info = { 0 }; // 以下設定字型 info.cbSize = sizeof(info); info.dwFontSize.Y = 16; // leave X as zero info.FontWeight = FW_NORMAL; wcscpy(info.FaceName, L"Consolas"); SetCurrentConsoleFontEx(GetStdHandle(STD_OUTPUT_HANDLE), NULL, &info);
2. 不使用程式碼
手動啟動一個控制檯程式,啟動之後設定編碼為utf8
命令:chcp 65001
然後,設定字型為Consolas
程式碼例子:
#include <stdio.h> #include <stdlib.h> #include <wchar.h> #ifdef _WIN32 #include <Windows.h> #endif /** 為保證控制檯程式輸出中文不亂碼: 1、xxx.c xxx.cpp使用utf-8編碼,來支援linux和window的中文。 2、window cmd需要進行下面設定 */ int main(void) { #ifdef _WIN32 //http://m.blog.csdn.net/article/details?id=52789570 //控制檯顯示亂碼糾正 // system("chcp 65001"); //設定字符集(使用SetConsoleCP(65001)設定無效,原因未知) SetConsoleOutputCP (65001); CONSOLE_FONT_INFOEX info = { 0 }; // 以下設定字型來支援中文顯示。 info.cbSize = sizeof(info); info.dwFontSize.Y = 16; // leave X as zero info.FontWeight = FW_NORMAL; wcscpy(info.FaceName, L"Consolas"); SetCurrentConsoleFontEx(GetStdHandle(STD_OUTPUT_HANDLE), NULL, &info); #endif printf("Hello World!\n"); printf("測試中文!\n"); printf("我是中文!\n"); printf("Hello World!\n"); getchar(); return 0; }