2011-08-11 57 views
5

我已经完成了对stackoverflow和Google的详尽搜索,但至今我一直无法找到其他人有类似问题。Java Swing - JTextField/JTextArea无法粘贴补充的Unicode字符

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

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

这是使用的是Windows 7和Java 6

我的理解,从Java 5中,加入了补充支持Unicode字符进行测试,但是,我想知道为什么(或者)剪切和粘贴功能在挥杆中仍然不允许我粘贴这些角色。在使用JTextField或JTextArea类时,是否还需要做其他事情才能让Java处理这些字符? Java的Swing库能够将这些字符粘贴到文本字段中吗?

谢谢你的时间!

+1

我刚发布这篇文章,比我可能找到我的答案。这在JDK中是一个长期存在的bug - http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6877495。 – Locriansax

+0

在其更多的生命周期中,Unicode具有比16位整数更多的字符!我不能相信Java仍然与此有关。但是昨天我在Java String类中发现了另一个UCS-2错误,这个错误永远存在。这是荒唐的。整个UTF-16的事情是一个可怕的诅咒,Java永远不会摆脱它造成的无数错误。它们无处不在,令人发狂。人们无法把事情做好。 – tchrist

+0

谢谢阿列克谢!刚刚创建了一个答案。 :) – Locriansax

回答