使用printf在控制台中使用C ++ unicode字符?

时间:2017-06-14 15:48:18

标签: c++ windows unicode windows-console

我的代码:

#include <iostream>
#include <windows.h>

using namespace std;

int pos[9];

int main() {
    printf(" %c ║ %c ║ %c ", pos[0], pos[1], pos[2]);
    printf("═══╬═══╬═══");
    printf(" %c ║ %c ║ %c "), pos[3], pos[4], pos[5];
    printf("═══╬═══╬═══");
    printf(" %c ║ %c ║ %c "), pos[6], pos[7], pos[8];
    system("pause");
}

我的控制台输出:

Console

我知道还有其他方法可以做到这一点,但重点是用printf实现这一点:|有什么想法吗?

1 个答案:

答案 0 :(得分:3)

要使用printf,并假设您使用的是美国本地化的Windows,控制台代码页为437(运行chcp进行检查),那么如果保存源代码,则以下更正的代码将起作用代码页437中的文件。一种方法是使用Notepad ++并在菜单上设置Encoding->Character sets->Western European->OEM-US。这样做的缺点是你的源代码在大多数编辑器中都不能很好地显示,除非它们特别支持cp437,甚至Notepad ++在重新打开文件时也不能正确显示它而不再设置编码。

#include <stdio.h>
#include <stdlib.h>
#include <io.h>
#include <fcntl.h>

int main()
{
    char pos[9] = {'X','O','X','O','X','O','X','O','X'};
    printf(" %c ║ %c ║ %c \n", pos[0], pos[1], pos[2]);
    printf("═══╬═══╬═══\n");
    printf(" %c ║ %c ║ %c \n", pos[3], pos[4], pos[5]);
    printf("═══╬═══╬═══\n");
    printf(" %c ║ %c ║ %c \n", pos[6], pos[7], pos[8]);
    system("pause");    system("pause");
}

在Windows上,由于API本身就是UTF-16,更好的方法是使用以下代码并以UTF-8 w / BOM保存文件:

#include <stdio.h>
#include <stdlib.h>
#include <io.h>
#include <fcntl.h>

int main()
{
    char pos[9] = {'X','O','X','O','X','O','X','O','X'};
    _setmode(_fileno(stdout), _O_U16TEXT);
    wprintf(L" %C ║ %C ║ %C \n", pos[0], pos[1], pos[2]);
    wprintf(L"═══╬═══╬═══\n");
    wprintf(L" %C ║ %C ║ %C \n", pos[3], pos[4], pos[5]);
    wprintf(L"═══╬═══╬═══\n");
    wprintf(L" %C ║ %C ║ %C \n", pos[6], pos[7], pos[8]);
    system("pause");
}

输出(两种情况):

 X ║ O ║ X
═══╬═══╬═══
 O ║ X ║ O
═══╬═══╬═══
 X ║ O ║ X
Press any key to continue . . .