You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++使用wprintf打印特殊Unicode字符出现问号问题求助

解决控制台打印Unicode方块字符显示问号的问题

核心原因

Windows控制台默认字体(如Consolas)未包含U+2581(下块)到U+2592(中块)这类中等灰度方块字符的字形,仅支持U+2588(全块)、U+2584(半块)等少数字符,导致未被支持的字符显示为问号。

解决步骤

  1. 更换控制台支持的字体

    • 打开控制台窗口,右键标题栏选择「属性」→「字体」,选择包含完整Unicode方块字符集的字体(如「Segoe UI Symbol」「Noto Sans Symbols」),点击确定应用。
    • 若字体列表中没有上述选项,需先安装对应字体包。
  2. 确保代码中宽字符输出的正确性

    • 直接使用宽字符字面量输出,避免编码转换错误:
      #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)。
  3. 可选:切换控制台输出编码为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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 18:06:31