我在一台特定的Windows7机器上有一个JavaFX应用程序的问题,被错误地显示了非英语文本。字体设置为,据我所知,这应该是Windows 7上的Segoe (这确实是这台机器上的默认字体)。系统其他部分(非java)中的所有文本都是正确显示的,因此字体在那里并具有适当的字符集,这使我相信,由于某种原因,JavaFX没有加载它,而是使用了不同的字体。
我的问题是--我如何才能找到JavaFX在特定系统上实际使用的字体?我尝试了Font.getDefault().getName(),但它只是返回"System",这没有告诉我什么。使用-Djavafx.verbose=true等等也没有产生任何有价值的东西。
在您问-是的之前,应用程序是Unicode,它可以在其他机器上工作,包括windows和linux,没有问题。我想试着诊断这个问题,这样我就不需要重新安装机器了(目前这还不是一个选项),或者是一些戏剧性的事情。
编辑:看起来Segoe实际上并不包含特定的字符集。然而,系统的其他部分对此并无异议。因此,一个更准确的问题是--为什么JavaFX没有意识到这一点并使用退路?以及如何调试/诊断出了什么问题?
发布于 2015-07-11 07:40:57
问题
在Windows 7系统中有一个Segoe作为默认字体,但默认版本是5.01。因此,您无法使用此字体显示希伯来字符。Windows将在运行时将丢失的希伯来字体字符替换为能够显示这些字符的另一种字体。
因此,如果您还没有将Font更新到最小版本5.13,那么它将始终被替换。但是JavaFX无法做到这一点,因为它获得了系统默认字体(在字体家族系统中)。在它得到字体之后,它将不会替换它上的字符。
Windows 7字体首选项
如果您转到系统首选项,然后使用详细信息视图看到字体,Segoe 不是支持希伯来字符的。

Windows 8.1字体首选项
如果您转到系统首选项,然后使用详细信息视图看到字体,Segoe 就是支持希伯来字符的。

甚至看看这个类别,如果它没有被设置为文本,那么它可能不是默认的字体。
解决方案
用CSS定义字体
设置另一个字体,它可以显示整个应用程序的希伯来语。这里描述了这一点:https://stackoverflow.com/a/18409438/4170073
通过加载字体来定义字体
我已经向其他一些人展示了,您将能够在项目中放置所需的字体并从那里调用它:https://stackoverflow.com/a/31291372/4170073
结论
为了确保您的语言正确显示,您必须使用包并使用您自己的字体。否则,您将永远无法确定是否会在另一个系统上正确显示您的文本。这是而不是的解决方案,这是应用程序(JavaFX,Swing)所要做的。
https://stackoverflow.com/questions/31344162
复制相似问题