Unicode字符未正确组合

时间:2018-12-06 10:40:05

标签: unicode combining-marks font-rendering

我正在处理一些我想在浏览器中显示的梵文文本数据。不幸的是,没有间隔的组合字符的一种组合不会呈现为探针组合字符。

每当将基本字符与 Devanagari重音符号Udatta ॑ (U+0951) Devanagari重音Visarga ः (U+0903)结合使用时,就会发生此问题。 / p>

一个示例是र॑ः,它是र (U+0930) + + ,应呈现为一个字符。但是,压力信号和另一个压力信号似乎彼此不喜欢(如您在上面看到的一样!)。
只需将基本字符与其他两个符号结合起来,顺便说一句:र॑ / रः

我已经尝试使用几种字体,这些字体应该能够呈现梵文字符(某些Noto字体,Siddhanta,GentiumPlus),并在不同的浏览器中进行了测试,但是问题似乎出在其他方面。

有人有想法吗?这不是符号的有效组合吗?

编辑:我只是试图在两个标记之间切换,以查看是否-它呈现为रः॑,所以U+0951U+0903似乎没有相同的功能,因为压力符号会显示在其他标记的上方。
看来我还不太了解Unicode。

1 个答案:

答案 0 :(得分:-1)

这不是解决您问题的方法,但可能是有用的信息:

  

我正在处理一些梵文文本数据,我想在其中显示   浏览器。

像您一样,尽管尝试了多种字体,包括 Arial Unicode MS ,但我无法在任何浏览器中使用它:

browserDevanagari

浏览器只是在JSP的Devanagari Test: &#x0930;&#x0903;&#x0951;中呈现文本<body>。应力符号明显出现在 Sign Visarga 的上方,而不是基本字符。

  

这不是符号的有效组合吗?

这是有效的组合。我不知道Devanagari,所以我不知道它在语义上是否“有效”,但是从Java应用程序中准确生成所需的字符很简单:

System.out.println("Devanagari test: \u0930\u0903\u0951");

这是执行println()调用后的输出,在基本字符上方显示了压力符号:

devanagara1

上面的屏幕截图来自Windows 10上的NetBeans 8.2,但是使用最新版本的Eclipse和Intellij IDEA,渲染效果也很好。约束是:

  • 必须在println()中按此顺序指定三个字符,才能进行渲染。
  • 维萨(Visarga)标记和维斯塔(Stress Sign Udatta)标记必须以Unicode形式显示。将其字形表示形式粘贴到源代码中将不起作用,尽管可以对基本字符进行此操作。
  • 必须使用适当的字体进行显示。我在上面的屏幕截图中使用了 Arial Unicode MS ,但是其他字体,例如 Serif SansSerif Monospaced 工作。
  

有人有主意吗?

不幸的是,尽管很明显:

  • 要渲染的字素存在,并且是有效的。
  • 尽管它不会在浏览器中呈现,但可以由Java应用程序将其写入控制台。
  • 问题似乎是所有浏览器都将变音符号( Stress Sign Udatta )应用于紧接在前的字符,而不是基础字符。

有关更多信息,请参见Why are some combining diacritics shifted to the right in some programs?