在Java GUI中使用Unicode字符是否安全?

时间:2011-09-13 09:32:37

标签: java user-interface unicode fonts portability

对于Java GUI中的播放按钮,我目前使用标签设置为“▻”的按钮(在Unicode符号表中找到此符号)。据我了解,最好不要在源代码中直接使用这些符号,而是在本例中使用显式的unicode表示,如\u25BB,因为某些工具(编辑器,......)可能无法处理文件非ASCII内容(这是正确的吗?)。

假设编译的类包含正确的字符,GUI 在哪种情况下会在当前的PC操作系统上显示预期的符号? Linux,Windows,Mac应该都支持UTF-16,对吗?可用的字体或字体设置是否会导致此方法出现问题?

(当然我可以添加一个图标,但如果符号已经可用,为什么要添加额外的资源......假设这是一个可移植的解决方案)

3 个答案:

答案 0 :(得分:6)

  

可用的字体或字体设置是否会导致此方法出现问题?

不幸的是他们这样做了。你当然可以在源代码中使用unicode,但问题是目前unicode has 246,943 code points assigned所以很明显没有字体甚至只有那些定义的那部分。当字形不可用时,您将获得正方形或其他奇怪的渲染。我曾经遇到过一些相对简单的符号,比如³在一台Windows计算机上渲染得很好,在下一台几乎相同的计算机中显示为正方形。所有类型的语言和区域设置以及次要版本更改都会影响这一点,因此它非常脆弱。

AFAIK很少(如果有的话)字符保证始终可用。 Java的Font类有一些方法,如canDisplaycanDisplayUpTo,这对于在运行时检查这个方法很有用。

您可以捆绑一些具有所需特殊字符的优质TrueType字体,而不是使用图标,然后在您的应用中随处使用该字体。

答案 1 :(得分:3)

I currently use a button with the label set to ' ▻ ' 

而不是我总是使用JButton(String text, Icon icon),如果有Icon或其他Font,UTF-16或Unicode

,则Font无关紧要

答案 2 :(得分:2)

大多数编辑都支持unicode,所以继续。

看看这篇文章:Eclipse French support

如果你使用像记事本这样的简单编辑器,那么当你保存类型名称时,选择UTF编码(http://www.sevenforums.com/software/72727-how-make-notepad-save-txt-files-unicode.html