QEMU管理的Windows 10虚拟机中非Unicode字体显示乱码问题求助
看起来你遇到的这个问题确实挺闹心的——同样的Windows 10系统、同款希伯来语APP,在VirtualBox或VMware里都能正常显示字体,唯独换成virt-manager管理的QEMU虚拟机就乱码,而且之前还能正常用,这反差感拉满了。咱们来捋捋可能的原因和解决方向:
先检查显示后端的差异
Virt-manager默认一般用Spice作为显示后端,而VirtualBox/VMware有自己的独立显示栈。你可以试试切换显示后端:关闭虚拟机后,在virt-manager的「显示」设置里,把Spice换成VNC,或者反过来,重启虚拟机后再打开APP看字体是否正常。另外,要是用Spice的话,看看有没有开启「字体平滑」这类选项,有时候这个会干扰非Unicode字体的渲染逻辑。调整虚拟机的显卡配置
QEMU默认的显卡是QXL,你可以试试换成其他显卡模型,比如VirtIO GPU或者标准VGA:在虚拟机设置的「显示」→「显卡」选项里更换,重启后测试。另外别忘了确保虚拟机里装了最新的virtio-win驱动(如果用了VirtIO设备的话),旧驱动可能存在字体渲染的兼容性bug。确认非Unicode程序的系统语言设置
虽然你说系统locale设成希伯来语了,但Windows还有个专门针对非Unicode程序的语言设置,别漏了:打开控制面板→区域→「管理」标签页,点击「更改系统区域设置」,确保选的是「希伯来语(以色列)」,改完重启虚拟机试试。很多时候这个设置和系统locale是分开的,哪怕locale对了,这个没设对也会导致乱码。升级QEMU版本试试
你说在多个Debian系主机上都遇到这个问题,可能是当前主机上的QEMU版本存在共性bug。可以试试升级到最新稳定版:在主机上执行sudo apt update && sudo apt upgrade qemu-system-x86,要是有backports仓库的话,也可以试试装backports里的新版本QEMU,说不定能解决兼容性问题。调整QEMU的启动参数
有时候QEMU默认的字符编码或显示相关参数会影响非Unicode字体。你可以在virt-manager里找到虚拟机的「XML」配置标签,在<domain>标签内添加一些自定义启动参数试试,比如关闭Spice的字体压缩:<qemu:commandline> <qemu:arg value="-spice"/> <qemu:arg value="disable-ticketing,font-compression=off"/> </qemu:commandline>添加完保存,重启虚拟机测试。
至于你问的是不是QEMU的问题?从你描述的「仅QEMU下出问题」来看,大概率是QEMU(或者virt-manager的默认配置)和这款非Unicode希伯来语APP之间的兼容性问题,不是巧合。毕竟VirtualBox和VMware的显示模拟逻辑和QEMU完全不同,它们对Windows老旧字体的渲染支持可能更到位,而QEMU的Spice/QXL组合在处理这类特殊字体时可能存在bug。
备注:内容来源于stack exchange,提问作者shmu

