我已經完成了對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庫能夠將這些字符粘貼到文本字段中嗎?
謝謝你的時間!
我剛發佈這篇文章,比我可能找到我的答案。這在JDK中是一個長期存在的bug - http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6877495。 – Locriansax
在其更多的生命週期中,Unicode具有比16位整數更多的字符!我不能相信Java仍然與此有關。但是昨天我在Java String類中發現了另一個UCS-2錯誤,這個錯誤永遠存在。這是荒唐的。整個UTF-16的事情是一個可怕的詛咒,Java永遠不會擺脫它造成的無數錯誤。它們無處不在,令人發狂。人們無法把事情做好。 – tchrist
謝謝阿列克謝!剛剛創建了一個答案。 :) – Locriansax