Java Swing - JTextField / JTextArea无法粘贴补充unicode字符

时间:2011-08-11 15:27:35

标签: java unicode paste utf-16

我已经对stackoverflow和Google进行了详尽的搜索,但到目前为止我还是找不到其他类似问题。

在Java Swing测试程序示例中,我创建了一个简单的JTextField,以便我可以尝试从网页(http://isthisthingon.org/unicode/)中将字符粘贴到其中。当我用'㓿'(代码点13567)进行测试时,它可以粘贴角色。此字符是CJK表意文字扩展A平面中最后列出的字符。但是,当我移动到下一个相关平面时,CJK表意文字扩展B,试图复制并粘贴字符''(代码点131072)失败。它不会渲染一个方框或任何形式的字形,看起来好像我根本没有任何系统剪贴板。

我意识到CJK表意文字扩展B是一组被认为是“补充”的字符,当Java在内部将它们编码为UTF-16时需要两个16位块而不是一个。进一步测试证明,如果我将文本硬编码到显示区域,我可以显示补充字符。

使用Windows 7和Java 6进行了测试。

据我所知,从Java 5开始,添加了对补充unicode字符的支持,但是,我想知道为什么(或者如果)swing中的剪切和粘贴功能仍然不允许我粘贴这些字符。在使用JTextField或JTextArea类时,还需要做些什么来告诉Java处理这些字符吗? Java的Swing库是否还有一种方法可以将这些字符粘贴到文本字段中?

感谢您的时间!

1 个答案:

答案 0 :(得分:2)

我发布此消息后,我可能已经找到了答案。这是一个long standing bug in the JDK