Unicode字符不是';不能正确组合

Unicode字符不是';不能正确组合,unicode,combining-marks,font-rendering,Unicode,Combining Marks,Font Rendering,我正在处理一些要在浏览器中显示的Devanagari文本数据。不幸的是,有一个非空格组合字符的组合不会被渲染为可能的组合字符 每次基本字符与Devanagari应力符号Udatta॑ (U+0951)和德瓦纳加里符号Visargaः (U+0903) 例如र॑ः,即र (U+0930)+॑+ः并应呈现为一个字符。但是压力星座和另一个星座似乎彼此不喜欢(正如你在上面看到的!)。 将基字符与其他两个符号单独组合是没有问题的,顺便说一句:र॑/रः 我已经尝试过使用几种应该能够呈现Devanagari

我正在处理一些要在浏览器中显示的Devanagari文本数据。不幸的是,有一个非空格组合字符的组合不会被渲染为可能的组合字符

每次基本字符与Devanagari应力符号Udatta
॑ (U+0951)
和德瓦纳加里符号Visarga
ः (U+0903)

例如
र॑ः,即
र (U+0930)
+
+
并应呈现为一个字符。但是压力星座和另一个星座似乎彼此不喜欢(正如你在上面看到的!)。
将基字符与其他两个符号单独组合是没有问题的,顺便说一句:
र॑/
रः

我已经尝试过使用几种应该能够呈现Devanagari字符的字体(一些Noto字体、Siddhanta字体、GentiumPlus字体),并在不同的浏览器上进行了测试,但问题似乎在于其他方面

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

编辑:我只是试着在两个标记之间切换,看看会发生什么-它呈现为
रः॑
,因此
U+0951
U+0903
似乎没有相同的功能,因为应力符号呈现在另一个标记的顶部。

看起来我对Unicode还不够了解。

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

我正在处理一些Devanagari文本数据,我想在 浏览器

和您一样,尽管我尝试了几种字体,包括Arial Unicode MS,但在任何浏览器中都无法实现此功能:

浏览器只是呈现文本
Devanagari Test:रः॑
中的code>。应力符号明显出现在符号Visarga的上方,而不是基本字符

这不是有效的符号组合吗

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

System.out.println(“Devanagari测试:\u0930\u0903\u0951”)

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

上面的屏幕截图来自Windows 10上的NetBeans 8.2,但在使用最新版本的Eclipse和Intellij IDEA时,渲染效果也很好。制约因素包括:

  • 必须按照该顺序在
    println()
    中指定这三个字符,渲染才能正常工作
  • 符号Visarga和应力符号Udatta必须以Unicode格式显示。将它们的字形表示粘贴到源代码中是行不通的,尽管这可以为基本字符完成
  • 显示器必须使用适当的字体。我在上面的屏幕截图中使用了Arial Unicode MS,但其他字体,如Serif、SansSerif和Monospaced也可以使用
有人有主意吗

不幸的是,尽管很明显:

  • 要渲染的图形名已存在,并且有效
  • 虽然它不会在浏览器中呈现,但可以通过Java应用程序将其写入控制台
  • 问题似乎是所有浏览器都将变音符号(重音符号Udatta)应用于前一个字符,而不是基础字符

有关这方面的更多信息,请参阅。

谢谢您的想法!我的问题特别是关于浏览器中的字体渲染,但这很有趣。到现在为止,我已经意识到它在某些浏览器/操作系统配置中可以正常工作,甚至可以连接到特定于操作系统的字体渲染。如果我找到了解决方案,我会把它贴在这里。