22

我正在尝试在 Mac OS X 10.6 上正确呈现梵文连字(在 Unicode 字符串中)。

字符串绘制在 a 上JComponentRenderingHints用于抗锯齿。连字在 Windows XP SP2 和 7 以及 Ubuntu 中正确显示,但在 Mac OS X 中,连字被分解(或者更确切地说,未正确合并),变音符号被移离其位置等(参见下面的屏幕截图,左侧 Win XP SP2 的正确渲染示例(使用RenderingHintsAntialiasing Key ON),右侧 Mac OS X 10.6.7 的错误渲染示例(Antialising DEFAULT=OFF)。

我已将字体设置如下,因此它应该在任何系统上使用默认字体:

new Font(null,Font.PLAIN,20);

我相信这一切可能与 Mac 上的默认字符编码是 MacRoman(不是 UTF-8 子集),而其他系统(如 Windows)使用 UTF-8 子集(如 WinLatin-1 ) 或 cp1252 等。

即使手头有这些信息,我也不知道如何处理这个问题。因此,如果有人能够指出我正确的方向,我将不胜感激。

相同字符串的正确和错误渲染

我已经尝试了很多事情:

  • 将字体设置为 Devanagari MT 并没有解决问题
  • TextAttribute LIGATURES_ON没有解决问题

我非常感谢其他开发人员的任何提示或代码片段(最好具有在 Mac 上开发的印地语背景)。

4

4 回答 4

6

我自己不是专家,但这里有一些指示。据我从维基百科了解到,问题很可能出在您的字体上。提前为长引号道歉,否则我可以将 2 篇维基百科文章链接起来。

这是Unicode 文章中关于连字的部分:

连字

许多脚本,包括阿拉伯语和梵文,都有特殊的拼写规则,要求将某些字母组合组合成特殊的连字形式。管理连字形成的规则可能相当复杂,需要特殊的脚本成形技术,例如 ACE(1980 年代 DecoType 的阿拉伯书法引擎,用于在 Unicode 标准的印刷版中生成所有阿拉伯语示例),这成为了证明OpenType(Adobe 和 Microsoft)、Graphite(SIL International)或AAT(Apple)的概念。

进一步阅读AAT(Apple 高级排版)文章,可以了解以下信息。我建议阅读整篇文章。

Mac OS X 中的 AAT 和 OpenType

从 Mac OS X 10.5 Leopard 开始,对 OpenType 的部分支持可用。目前支持仅限于西方文字和阿拉伯语(截至 2011 年)。如果字体有 AAT 表,它们将用于排版。如果字体没有 AAT 表但有 OpenType 表,它们将在系统支持的范围内使用。

这意味着许多西方或中东脚本的 OpenType 字体可以在 Mac OS X 10.5 上使用而无需修改,但泰语和梵文等南亚脚本则不能。这些需要 AAT 表才能正确布局。

稍后在有关字体布局的部分中:

由于 AAT 完全使用字形而不是字符来操作,因此生成正确显示所需的所有布局信息都存在于字体本身中。这允许为新脚本添加字体,而无需操作系统的任何特定支持。

最后:

印度文字的 AAT

对于印度语脚本,唯一需要的功能是字形重新排序和替换。AAT 支持这两者。如上所述,印度语脚本的 OpenType 字体需要添加 AAT 表才能在 Mac OS X 上正常运行。但是请注意,这仅适用于依赖于 OpenType 系统支持的软件。提供自己的 OpenType 实现的程序将使用 OpenType 字体正确呈现 Indic。(但是,它们可能无法正确使用 AAT 表呈现印度字体。)

Mac OS X 10.5 附带了天城文、Gurmukhi、古吉拉特语、泰语、藏语和泰米尔语的字体。其他印度文字的字体可从第三方获得。

也许您需要选择一种明确支持梵文的字体。

于 2011-05-17T15:36:09.937 回答
3

使用 Quartz 渲染器而不是 Java 2D 渲染器。

这对字形渲染的质量产生了重大影响。需要先完成,如此处所建议

if (System.getProperty("os.name").startsWith("Mac OS X")) {
    System.setProperty("apple.awt.graphics.UseQuartz", "true");
}

你也可以看看 using TextLayout,因为FontRenderContext可以应用RenderingHints.KEY_FRACTIONALMETRICS

于 2011-06-20T05:38:47.443 回答
1

我在使用 Gurmukhi 脚本的项目中遇到了同样的问题。我现在已经尝试了与 Mac OS X(Gurmukhi MT、Gurmukhi MN)捆绑的 AAT 表的字体和 OpenType 表的字体。在 Mac OS X 上的 JAVA 中都无法使用,但 OpenType 字体的可读性略高。唯一的问题是“halant”字符没有像它应该的那样呈现字符的半形式。

我认为问题在于我们使用的字体以及它们与 Mac OS X 上的 JAVA 的兼容性。

于 2011-06-16T18:20:07.610 回答
0

当我在 Mac 上尝试使用泰米尔语的http://jambula.sourceforge.net时遇到了同样的问题。

我想出的解决方法是使用 Font.createFont 加载显式字体。

您可以在以下位置查看测试程序:TestRendering.java

java org.jambula.image.TestRendering text.png

在 text.png 中错误地呈现泰米尔语文本

然而

java org.jambula.image.TestRendering text.png "/Library/Fonts/Arial Unicode.ttf"

正确呈现它。

这可能是由于https://bugs.openjdk.java.net/browse/JDK-7162125

于 2016-03-17T19:28:51.133 回答