2011-08-11 12 views
5

He realizado una búsqueda exhaustiva de stackoverflow y Google, pero hasta ahora no he podido encontrar otros que tengan un problema similar.Java Swing - JTextField/JTextArea no se puede pegar caracteres Unicode suplementarios

En un ejemplo del programa de prueba Java Swing, creo un JTextField simple para que pueda intentar pegar caracteres en él desde una página web (http://isthisthingon.org/unicode/). Cuando pruebo con '㓿' (código de punto 13567), es posible pegar el carácter. Este personaje es el último personaje de la lista en el plano CJK Ideograph Extension A. Sin embargo, cuando me muevo al siguiente plano relacionado, CJK Ideograph Extension B, tratando de copiar y pegar el carácter '' (código de punto 131072) falla. No representa una caja ni ningún tipo de glifo, parece como si no tuviera nada en el portapapeles del sistema.

Me doy cuenta de que CJK Ideograph Extension B es un conjunto de caracteres que se consideran "suplementarios" y necesitan dos bloques de 16 bits en lugar de uno cuando Java los codifica internamente como UTF-16. Pruebas adicionales prueban que puedo mostrar los caracteres suplementarios si codigo el texto en un área de visualización.

Esto fue probada usando Windows 7 y Java 6.

entiendo que a partir de Java 5, se añadió soporte para los caracteres Unicode suplementarios, sin embargo, me pregunto por qué (o si) la funcionalidad de cortar y pegar en swing todavía no me permite pegar estos personajes. ¿Hay algo adicional que deba hacer para decirle a Java que maneje estos caracteres cuando use las clases JTextField o JTextArea? ¿Todavía hay forma de que las bibliotecas Swing de Java puedan pegar estos caracteres en un campo de texto?

¡Gracias por su tiempo!

+1

Apenas publiqué esto, es posible que haya encontrado mi respuesta. Este ha sido un error de larga data en el JDK - http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6877495. – Locriansax

+0

¡Unicode ha tenido más caracteres que los que caben en un entero de 16 bits durante la mayor parte de su vida útil! No puedo creer que Java todavía esté jodido con esto. Pero ayer encontré otro error UCS-2 en la clase Java String, uno que ha estado allí para siempre. Esto es ridículo. Todo el asunto UTF-16 es una maldición horrible, y Java nunca estará libre de los innumerables errores que causa. Simplemente están en todas partes y es enloquecedor. La gente simplemente no puede hacer las cosas bien. – tchrist

+0

Gracias Alexey! acaba de crear una respuesta. :) – Locriansax

Respuesta

Cuestiones relacionadas