使用 printf 的控制台中的 C++ unicode 字符?
C++ unicode characters in console using printf?
我的代码:
#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");
}
我的控制台输出:
我知道还有其他方法可以做到这一点,但重点是使用 printf 来实现:|有什么想法吗?
要使用 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,更好的方法是使用以下代码并将文件保存为带 BOM 的 UTF-8:
#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 . . .
我的代码:
#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");
}
我的控制台输出:
我知道还有其他方法可以做到这一点,但重点是使用 printf 来实现:|有什么想法吗?
要使用 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,更好的方法是使用以下代码并将文件保存为带 BOM 的 UTF-8:
#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 . . .