Java,Unicode和字体

4
我已经查看了Java文档,并在网络上搜索有关Java对特定字体(如等宽字体)的国际字符支持的信息,但是没有得到清晰具体的答案。
Java 1.4和Java 1.5/1.6之间有所改变。例如,在Java 1.4中,如果您将JTextArea的字体设置为Monospace,则无法处理外语字符(会显示为矩形),但在Java 1.5/1.6中似乎可以正常工作。
这些差异/改进的支持是否在任何地方有明确的文档记录?
谢谢。
2个回答

3

来自国际化增强

多语言文本呈现

为了呈现多语言文本,2D现在使用逻辑字体,并利用已安装的主机操作系统字体支持所有受支持的书写系统。例如,如果您运行在泰国区域设置环境中,但安装了韩文字体,则泰语和韩语都将被呈现。JRE现在还会自动检测安装到其lib/fonts/fallback目录中的物理字体,并将这些物理字体添加到所有用于2D呈现的逻辑字体中。

在Windows上使用Unicode API

AWT现在在Windows 2000/XP上使用Unicode API。因此,它的一些组件可以处理文本,而不受Windows区域设置的限制。 例如,无论Windows区域设置如何,AWT文本组件都可以接受和显示天城体书写系统的文本。(我强调)


0
这些字符有多“外来”?大多数基于拉丁字母的字体至少可以处理ISO-8859-1上半部分的重音字母和其他字符,但我认为您不能合理地指望支持超出此范围的任何内容。
您通常最好的选择是让用户从支持的字体列表中进行选择,该列表是从底层操作系统检索的。如果无法执行此操作或不想执行此操作,则可以采用CSS方法:遍历可接受字体的列表,并使用找到的第一个已安装的字体。
要填充列表,只需在Google上搜索“程序员字体”或“等宽字体”。我从来不喜欢Java的任何逻辑字体,特别是Monospace,在Windows框中是Courier或Courier New。我几年前就停止使用它了。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接