如何在C++中使用Unicode绘制方框?RPG开发代码求助
搞定C++里的Unicode方框绘制问题
嘿,我来帮你解决这个小麻烦!先看你的代码,最明显的问题就是PrintLevel()函数里的循环没写完,不过就算补全了,控制台大概率还会乱码——毕竟Windows默认控制台不怎么待见Unicode,下面一步步来:
第一步:把没写完的循环补完整
你的二维数组是5行4列,得用嵌套循环把每个字符都输出出来,不然方框根本拼不起来:
void PrintLevel() { for(int i = 0; i < 5; ++i) { // 遍历每一行 for(int j = 0; j < 4; ++j) { // 输出当前行的每个字符 cout << lvl[i][j]; } cout << endl; // 每行结束记得换行,不然所有字符会挤成一团 } }
第二步:解决控制台Unicode乱码问题
Windows默认控制台用的是GBK编码,完全认不出你用的这些Unicode方框字符,所以得先把控制台的输出编码改成UTF-8。我们可以用Windows的API来搞定,记得加上<windows.h>头文件:
修改后的完整代码如下:
#include <iostream> #include <string> #include <windows.h> // 用来设置控制台编码的头文件 using namespace std; void PrintLevel(); string lvl[5][4] { {"\u250f", "\u2501", "\u2501", "\u2513"}, {"\u2503", "\u0020", "\u0020", "\u2503"}, {"\u2503", "\u0020", "\u0020", "\u2503"}, {"\u2503", "\u0020", "\u0020", "\u2503"}, {"\u2517", "\u2501", "\u2501", "\u251B"} }; int main() { SetConsoleOutputCP(CP_UTF8); // 把控制台输出编码切换为UTF-8 PrintLevel(); return 0; } void PrintLevel() { for(int i = 0; i < 5; ++i) { for(int j = 0; j < 4; ++j) { cout << lvl[i][j]; } cout << endl; } }
额外小贴士
- 如果是在Linux或者macOS上运行代码,控制台默认就支持UTF-8,不用加
SetConsoleOutputCP这一行,直接补全循环就能正常显示方框 - 记得你的代码文件要保存为UTF-8编码,不然源文件里的Unicode字符本身就会乱掉
- 也可以试试用宽字符类型来处理,比如把数组改成
wstring,输出用wcout:
输出时用wstring lvl[5][4] { {L"\u250f", L"\u2501", L"\u2501", L"\u2513"}, {L"\u2503", L"\u0020", L"\u0020", L"\u2503"}, // 剩余行同理加上L前缀 };wcout << lvl[i][j];,这种方式也能绕开编码兼容问题
这样改完之后,你就能看到整整齐齐的方框啦!
内容的提问来源于stack exchange,提问作者Jordan Baron
相关产品推荐
相关产品推荐

