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

标签 java unicode paste utf-16

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

在示例 Java Swing 测试程序中,我创建了一个普通的 JTextField,以便我可以尝试将字符从网页 (http://isthisthingon.org/unicode/) 粘贴到其中。当我用“㓿”(代码点 13567)进行测试时,它能够粘贴字符。该字符是 CJK 表意文字扩展 A 平面中最后列出的字符。但是,当我移动到下一个相关平面 CJK Ideograph Extension B 时,尝试复制和粘贴字符“𠀀”(代码点 131072)失败。它不呈现框或任何类型的字形,看起来好像我在系统剪贴板中什么都没有。

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

这是使用 Windows 7 和 Java 6 测试的。

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

感谢您的宝贵时间!

最佳答案

我一发布这个,我可能就找到了我的答案。这是一个long standing bug in the JDK .

关于Java Swing - JTextField/JTextArea 无法粘贴补充的 unicode 字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7028598/

相关文章:

java - 将 switch 语句与枚举一起使用

java - OpenJPA 说 : You have supplied colums for FooBar but this mapping cannot have columns in this context

java - Android/Java - 从列表中删除方法引用

java - 如何在Java中将日期列表分组到相应的周?

java - 为什么我们在 Web 浏览器和 java swing 中无法获得相同的特定字体显示

delphi - 在 D2007 中将 Unicode 流转换为字符串列表

html - 如何在 Chrome 中将表情符号视觉水平居中?

linux - 我想将两个 csv 文件粘贴到一个新文件中

循环中的 VBA 复制和粘贴

javascript - 我怎么知道用户正在输入或粘贴?