C++使用wprintf打印特殊Unicode字符出现问号问题求助
解决控制台打印Unicode方块字符显示问号的问题
核心原因
Windows控制台默认字体(如Consolas)未包含U+2581(下块)到U+2592(中块)这类中等灰度方块字符的字形,仅支持U+2588(全块)、U+2584(半块)等少数字符,导致未被支持的字符显示为问号。
解决步骤
更换控制台支持的字体
- 打开控制台窗口,右键标题栏选择「属性」→「字体」,选择包含完整Unicode方块字符集的字体(如「Segoe UI Symbol」「Noto Sans Symbols」),点击确定应用。
- 若字体列表中没有上述选项,需先安装对应字体包。
确保代码中宽字符输出的正确性
- 直接使用宽字符字面量输出,避免编码转换错误:
#include <stdio.h> #include <fcntl.h> #include <io.h> int main() { _setmode(_fileno(stdout), _O_U16TEXT); wprintf(L"▁ ▂ ▃ ▄ ▅ ▆ ▇ █ ▇ ▆ ▅ ▄ ▃ ▁\n"); return 0; } - 若从文件读取字符,需确保文件为UTF-16LE编码(匹配Unicode项目的wchar_t编码),使用宽字符读取函数(如
_wfopen、fgetws)。
- 直接使用宽字符字面量输出,避免编码转换错误:
可选:切换控制台输出编码为UTF-8
- 若不想使用
_O_U16TEXT,可设置控制台输出代码页为UTF-8,直接输出UTF-8编码的字符串:#include <stdio.h> #include <windows.h> int main() { SetConsoleOutputCP(CP_UTF8); printf("▁ ▂ ▃ ▄ ▅ ▆ ▇ █ ▇ ▆ ▅ ▄ ▃ ▁\n"); return 0; } - 此方式需确保源文件保存为UTF-8带BOM格式,或在代码中直接使用UTF-8字符串字面量。
- 若不想使用
内容的提问来源于stack exchange,提问作者Norzka
相关产品推荐
相关产品推荐

