Java中某些Gurmukhi字符的表示不正确

Java中某些Gurmukhi字符的表示不正确,java,unicode,internationalization,javafx-2,Java,Unicode,Internationalization,Javafx 2,我试图用Gurmukhi脚本在Java桌面应用程序中显示一些文本。我在我的系统上安装了所有可在互联网上使用的Gurmukhi字体。我可以在浏览器和文字处理程序中用古尔木基语读写。它们几乎都能正确地呈现所有角色。像 -------图像删除---------- 现在相同的文本看起来像这样 -------图像删除---------- 在我的java应用程序中。我注意到,SIHARI(即用于表示I[如承诺中那样]的元音)放在字符后面,而不是前面 我在互联网上搜索过,发现Unicode建议在字符后面键入它

我试图用Gurmukhi脚本在Java桌面应用程序中显示一些文本。我在我的系统上安装了所有可在互联网上使用的Gurmukhi字体。我可以在浏览器和文字处理程序中用古尔木基语读写。它们几乎都能正确地呈现所有角色。像

-------图像删除----------

现在相同的文本看起来像这样

-------图像删除----------

在我的java应用程序中。我注意到,SIHARI(即用于表示
I
[如承诺中那样]的元音)放在字符后面,而不是前面

我在互联网上搜索过,发现Unicode建议在字符后面键入它(SIHARI-Unicode'\u0a3f'),但在字符前面呈现它。在我看来,Java似乎在盲目地呈现它,而没有遵循所描述的unicode逻辑

我不想创建同一文本的两个副本,以便在两个不同的地方使用。有没有其他/更好的方法来解决这个问题


(我已经尝试在我的应用程序中显式更改字体,尝试了所有可用的字体,但没有成功)。

是的,Unicode sihari是一个Unicode组合字符,您可以在另一个字符之后键入它,ਧਿ, 就像kanna一样ਸਾ 您没有提到操作环境-Microsoft Windows XP?Ubuntu Linux 10?您可能需要启用语言或脚本支持。如果是Windows和Java控制台,将Punjabi的代码页设置为65001可能会有所帮助。我使用的是Windows7 x64(尽管我使用的是Java 32位版本)。这看起来不像Windows的问题,因为我可以看到正确的(ਸਿ) 在浏览器和所有其他应用程序中,但在我的应用程序中,它显示的字符串与(ਸ ਿ). 我是说如果我打字ਰਹਿਤ 它显示为ਰਹਤਿ.另外,将java设置为使用CP65001(mystring.getBytes(“Windows-1250”),“Windows-65001”))也给了我这个异常:java.io.UnsupportedEncodingException:Windows-65001 Windows-65001就是UTF-8。因此,您应该使用
getBytes(Charset.forName(“UTF-8”)
。注意,通过使用Charset的
forName(String)
可以避免try-catch子句。另一方面,Windows1250是一个中欧代码页,它肯定不支持任何印度脚本。