控制台输出Unicode字符显示为空白矩形 字符集与配置问题咨询
问题解答
基础概念澄清
先明确三个核心概念的区别,帮你理清底层逻辑:
- 字符集(Character Set):是多个字符的集合,规定了集合内包含的所有字符,以及每个字符对应的唯一编号,常见的ASCII、GB2312、Unicode都属于字符集范畴。
- Unicode:是覆盖全球所有已收录语言、符号的通用字符集,你代码中遍历的0~1114112就是Unicode所有码点的完整范围,共分为17个平面。你现在能正常显示的大多是第0平面的常用字符,其余平面的生僻文种、特殊符号默认缺少字体支持就会显示空白矩形占位符。
- 代码页(Code Page):是字符集的编码实现映射表,早期为了适配不同语种的编码需求设计,比如GBK对应代码页936,UTF-8对应代码页65001,现在通用场景都推荐使用UTF-8代码页避免编码错误。
Ubuntu 20.04 终端显示缺失字符解决方法
- 第一步:安装全字符集覆盖字体,推荐安装Google开源的Noto字体全家桶,覆盖几乎所有Unicode已收录的字符:
终端执行命令:sudo apt install fonts-noto fonts-noto-cjk fonts-noto-color-emoji fonts-noto-unhinted - 第二步:配置终端默认字体,打开终端的「偏好设置」-「外观」,字体选择Noto系列的等宽字体(如Noto Mono),保存配置后重启终端即可生效。
- 额外说明:Unicode仍在持续新增字符,部分最新收录的字符可能需要安装开发版的Noto字体才能显示;此外你运行的遍历所有码点的代码本身会输出大量未分配码点、控制字符,这类字符本身没有可视字形,显示空白或占位符属于正常现象,不属于配置问题。
Windows 10 环境解决方法
cmd 环境
- 先设置默认代码页为UTF-8:按Win+R输入
regedit打开注册表,定位到HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Command Processor,新建字符串值命名为AutoRun,数值数据填写chcp 65001,保存后重启cmd就会默认启用UTF-8编码。 - 安装Noto字体后,右键cmd标题栏打开「属性」-「字体」,选择支持Unicode的等宽字体(如Noto Mono)即可。
Git Bash 环境
- 右键Git Bash窗口打开「Options」-「Text」,Locale选择
zh_CN,Character set选择UTF-8。 - 同页面的Select选项选择已安装的Noto等宽字体,保存重启即可生效。
WSL 环境
- 先按照上面Windows侧的要求配置终端字体和默认编码,再修改WSL内的系统编码:编辑
/etc/locale.gen文件,取消zh_CN.UTF-8 UTF-8和en_US.UTF-8 UTF-8前面的注释,执行sudo locale-gen生成编码文件,再编辑~/.bashrc在末尾添加export LC_ALL=zh_CN.UTF-8,执行source ~/.bashrc生效即可。
内容的提问来源于stack exchange,提问作者Niels
相关产品推荐
相关产品推荐

