Linux虚拟终端显示Unicode字符问题求助
你说得没错,这个问题确实是虚拟终端(TTY)使用的控制台字体不支持Devanagari(天城文)字符导致的——毕竟X终端用的是系统里的标准TrueType/OpenType字体,而TTY依赖专门的.psf格式控制台字体,默认配置里往往没包含这类非拉丁字符集的支持。下面是具体的解决步骤:
1. 安装必要的字体和配置工具
首先在能正常显示字符的X终端里执行命令,安装支持天城文的控制台字体包和配置工具:
sudo apt update && sudo apt install console-setup fonts-indic
2. 临时测试可用字体(快速验证)
不用繁琐配置,先直接指定一个支持多语言Unicode的控制台字体测试效果:
sudo setfont /usr/share/consolefonts/Uni2-Terminus16.psf.gz
执行完后切换到TTY(Ctrl+Alt+F2),打开你的abc.txt文件,看看'घ'能不能正常显示。如果这个字体路径不存在,你可以用ls /usr/share/consolefonts/ | grep Uni2找类似的可用字体文件。
3. 永久配置控制台字体
如果临时测试有效,接下来把设置永久化:
运行配置向导:
sudo dpkg-reconfigure console-setup跟着向导一步步选:
- 字符编码选UTF-8
- 字符集选择Devanagari(或者选"All"来支持更多语言)
- 字体选刚才测试有效的(比如Terminus系列),字号根据你的屏幕大小选合适的(比如16)
或者直接编辑配置文件
/etc/default/console-setup,手动指定字体:sudo nano /etc/default/console-setup修改成类似这样的内容:
FONTFACE="Terminus" FONTSIZE="16" # 或者直接指定字体文件路径 # FONT="/usr/share/consolefonts/Uni2-Terminus16.psf.gz"保存后执行
sudo setupcon让配置立即生效,不用重启。
4. 确认系统Locale是UTF-8
最后确保你的系统Locale是UTF-8编码(这一步大部分Ubuntu默认已经配置,但还是检查下更稳妥):
locale
如果输出里的LANG和LC_*不是en_US.UTF-8或其他UTF-8格式的Locale,执行下面的命令重新配置:
sudo dpkg-reconfigure locales
选择一个UTF-8的Locale作为默认即可。
这样设置后,你的TTY应该就能正常显示'घ'这个字符了——本质上就是给TTY换上了支持天城文的控制台字体,和X终端用的字体体系不一样,所以才会出现两边显示效果不同的情况。
内容的提问来源于stack exchange,提问作者Syed.Waris

