我试图在Mac OS X 10.6上正确渲染Devanagari连字(在Unicode字符串中)。
字符串在JComponent
上绘制,并以RenderingHints
为抗锯齿。连字在Windows XP SP2和7以及Ubuntu中正确显示,但在Mac OS X中,连字被分解(或者更确切地说,没有正确合并),变音符被移离其位置等等(参见下面的截图,正确的渲染示例来自左侧的Win XP SP2(使用RenderingHints
抗锯齿键ON
),右侧来自Mac OS X 10.6.7的错误渲染示例(Antialising DEFAULT
= {{1 }})。
我已将字体设置如下,因此它应该在任何系统上使用默认字体:
OFF
我相信所有这些都可能与Mac上的默认字符编码是MacRoman(不是UTF-8子集)以及其他系统(如Windows)使用UTF-8子集(例如WinLatin-1)或cp1252等。
即使掌握了这些信息,我也不知道如何处理这个问题。因此,如果有人能指出我正确的方向,我将非常感激。
我已经尝试了很多东西:
new Font(null,Font.PLAIN,20);
TextAttribute
没有解决问题我非常感谢任何提示或其他开发人员的代码片段(最好是在Mac上开发的印地语背景)。
答案 0 :(得分:6)
我自己不是专家,但这里有一些指示。据我所知,维基百科,问题很可能是你的字体。对于长引号,请提前道歉,否则我可能只是链接了2篇维基百科文章。
以下是Unicode article中连字部分的一部分:
<强>连字强>
许多剧本,包括阿拉伯语和梵文,都有特殊的拼写规则,要求将某些字母组合组合成特殊的连字形式。 管理连字形成的规则可能非常复杂,需要特殊的脚本整形技术,例如ACE(1980年代的DecoType阿拉伯语书法引擎),用于生成Unicode的印刷版中的所有阿拉伯语示例标准),它成为OpenType(由Adobe和Microsoft),Graphite(由SIL International提供)或 AAT(由Apple)的概念证明。
在AAT (Apple Advanced Typography)文章中进一步阅读,揭示了以下信息。我建议阅读整篇文章。
Mac OS X中的AAT和OpenType
从Mac OS X 10.5 Leopard开始,部分支持OpenType。该支持目前仅限于西方文字和阿拉伯文(截至2011年)。如果字体具有AAT表,则它们将用于排版。如果字体没有AAT表但具有OpenType表,则它们将在系统支持的范围内使用。
这意味着可以在Mac OS X 10.5上无需修改即可使用西方或中东脚本的许多OpenType字体,但泰国和梵文等南亚脚本则不能。这些需要AAT表才能正确布局。
稍后在关于字体布局的部分中:
由于AAT完全使用字形而不是字符,因此生成正确显示所需的所有布局信息都位于字体本身内。这允许为新脚本添加字体而无需任何特定字体来自操作系统的支持。
最后:
印度语脚本的AAT
对于印度语脚本,唯一需要的功能是字形重新排序和替换。 AAT支持这两种方式。如上所述,用于印度语脚本的OpenType字体需要在Mac OS X上正常运行之前添加AAT表。但是,请注意,这仅适用于依赖于OpenType系统支持的软件。提供自己的OpenType实现的程序将使用OpenType字体正确呈现Document。 (但是,它们可能无法正确地使用AAT表格呈现印度字体。)
Mac OS X 10.5附带了Devanagari,Gurmukhi,Gujarati,Thai,Tibetan和Tamil的字体。其他印度语脚本的字体可从第三方获得。
也许您需要选择明确支持梵文的字体。
答案 1 :(得分:3)
使用Quartz渲染器而不是Java 2D渲染器。
这使字形渲染的质量产生重大差异。首先需要按照建议here完成。
if (System.getProperty("os.name").startsWith("Mac OS X")) {
System.setProperty("apple.awt.graphics.UseQuartz", "true");
}
您可能还会考虑使用TextLayout
,因为FontRenderContext
可以应用RenderingHints.KEY_FRACTIONALMETRICS
。
答案 2 :(得分:1)
我正在使用Gurmukhi脚本处理的项目遇到了同样的问题。我现在尝试使用与Mac OS X(Gurmukhi MT,Gurmukhi MN)捆绑的AAT表和带有OpenType表的字体的两种字体。在Mac OS X上的JAVA都不起作用,但OpenType字体的可读性稍差。唯一的问题是“halant”角色不会像它应该那样渲染半个形式的角色。
我认为问题在于我们使用的字体以及它们在Mac OS X上与JAVA的兼容性。
答案 3 :(得分:0)
当我在Mac上尝试http://jambula.sourceforge.net使用泰米尔语时,我遇到了同样的问题。
我提出的解决方法是使用Font.createFont加载显式字体。
看到测试计划java org.jambula.image.TestRendering text.png
在text.png中错误地呈现泰米尔语文本
然而
java org.jambula.image.TestRendering text.png "/Library/Fonts/Arial Unicode.ttf"
正确渲染。