1. 程式人生 > >C++ 控制檯程式中輸出UTF8字元亂碼問題解決方法

C++ 控制檯程式中輸出UTF8字元亂碼問題解決方法

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;
}