接用户报告使用 PeerBanHelper 时,使用 JavaFx 的 GUI 界面出现中文乱码,但 Swing 的 GUI 界面则没问题。
用户自行报告安装了多个字体整合包,并且同样使用 JavaFx 的 HMCL 启动器也出现乱码。由于其它也使用 JavaFx GUI 的用户没有出现这个问题,且我也无法在本地复现,排除 PBH 自己的问题,多半这个锅得甩给字体整合包。
PeerBanHelper 并没有单独配置字体,因此 JavaFx 根据系统默认使用了默认中文字体微软雅黑。那么现在需要确定是不是微软雅黑的锅。现在指定 ListView 的字体为 Consolas, Monospace
,可以看到单独指定了字体的 ListView 没有此字体问题。
让用户(左图)看了一眼微软雅黑的字体文件属性:
可以看到版本号、版权信息都不同。
从正常的同版本 Windows 系统上复制一份 C:\Windows\Fonts
文件夹到问题设备上,然后全选右键,安装(for all users),为所有用户安装(不要选为当前用户安装,用带 UAC(小盾牌)标志的选项)。如果此时整个系统界面都已经乱码,使用开始菜单盲打 “语言”,快速进入语言菜单,先将系统切换到英语语言再操作。安装后注销重新登录即可解决问题。
如果用户无法执行这些操作,可以通过 CSS 手动设置 JavaFx 到其它字体,例如等线或者SimSun-ExtB
(宋体),虽然那叫一个丑,但是最起码绕过了乱码问题。
* {
-fx-font-family: "SimSun-ExtB"
}
Stage st = MainJavaFx.getStage();
st.getScene().getRoot().getStylesheets().add(Main.class.getResource("/javafx/css/root.css").toExternalForm());