¿Cómo establecer programáticamente el nombre de la aplicación en japonés?

Actualmente estoy tratando de establecer el nombre de la aplicación usando

net.rim.blackberry.api.homescreen.HomeScreen.setName("これはある");

pero arroja una excepción: IllegalArgumentException.

¿Alguien puede proporcionar la solución?

Estoy usando Blackberry JDE 5.0.

preguntado el 12 de junio de 12 a las 15:06

¿Podría proporcionar más información sobre IllegalArgumentException? La única otra opción sería probar el setName(String name, int int index) al API. -

funciona bien cuando configuro el nombre de la aplicación en inglés usando setName () pero arroja una excepción en japonés:

¿Qué dice el mensaje de excepción? Acabas de mostrarnos el nombre de la excepción. -

Mi opinión es que la API valida la entrada, tal vez solo acepte caracteres en inglés/euro. Probablemente desee escribir en el soporte de la API y ver si ese es el caso. -

try net.rim.blackberry.api.homescreen.HomeScreen.setName("\u3053\u308C\u306F\u3042\u308B"); -

2 Respuestas

Este es probablemente un problema de codificación de cadenas. Tratar

new String(new String("これはある").getBytes("UTF-16BE"), "UTF-16BE");

No es bonito, pero creo que funcionará.

Aquí hay un enlace a la especificación de cadena de Blackberry: http://www.blackberry.com/developers/docs/5.0.0api/java/lang/String.html

De forma predeterminada, es ISO-8859-1, que no incluye caracteres japoneses.

Respondido el 12 de junio de 12 a las 15:06

setName acepta una cadena, no una matriz de bytes, por lo que creo que está viendo el lado equivocado del problema. En el desarrollo de BlackBerry, no es posible especificar la codificación de sus archivos .java, y el valor predeterminado es iso-8859-1, por lo que el compilador intenta leer el código fuente en un juego de caracteres que no es compatible con el japonés. La respuesta de Svetlin en los comentarios es un mejor enfoque aquí. - Michael Donohue

Esto crearía una cadena a partir de una matriz de bytes que se entregaría a setName, no solo a una matriz de bytes. Un conjunto de caracteres japoneses se almacenará como bytes, independientemente de si la computadora los interpreta correctamente, ¿verdad? Es solo otra cadena (matriz de bytes) con una longitud y un terminador nulo. Al compilador no debería importarle. Su enfoque funciona, pero eso es si solo desea establecer una sola cadena. - nathas

Su solución no funciona porque el compilador de BlackBerry interpretará los caracteres japoneses en su fragmento como ISO-8859-1. El problema es fundamentalmente con la codificación del código fuente de Java. Llamar a getBytes y setBytes con el mismo la codificación de caracteres no cambiará los caracteres incorrectos que analiza el compilador. Además, aunque bastante irrelevante para esta pregunta, Java no usa representaciones de cadenas terminadas en nulo. - Michael Donohue

El problema que enfrenta es cómo obtener una cadena representada en su código fuente en su aplicación con los mismos caracteres. Para los caracteres latinos, esto es bastante sencillo, ya que podemos poner los caracteres entre comillas y obtener una cadena, como "Hola mundo".

Cuando vas a un idioma no latino, como el japonés, se vuelve más difícil. Todavía puede escribir japonés directamente en su código fuente, pero debe asegurarse de que su editor y su compilador estén de acuerdo en una codificación para que los caracteres puedan interpretarse correctamente. El compilador Java-SE toma un argumento "-codificación" que le permite especificar la codificación de sus archivos fuente de Java.
Desafortunadamente, rapc, el compilador de BlackBerry, no ofrece una opción para especificar la codificación, a pesar de que está invocando a javac. Por lo tanto, rapc usa la plataforma predeterminada, que es utf-8 en Linux y OSX e iso-8859-1 en Windows.

La forma de evitar este problema es usar una función del lenguaje Java para analizar cadenas: escape Unicode. Al ingresar la secuencia de seis caracteres "\u3053" en una cadena, el compilador de Java analizará ese número como hexadecimal y usará el punto de código Unicode correspondiente, resolviendo problemas con la codificación del archivo fuente. Entonces, "Hola mundo" y "\u0048\u0065\u006c\u006c\u006f\u0020\u0057\u006f\u0072\u006c\u0064" darán como resultado que aparezcan las mismas cadenas en sus archivos de clase.

Debido a esto, la respuesta de Svetlin de los comentarios es el enfoque correcto aquí:

net.rim.blackberry.api.homescreen.HomeScreen.setName("\u3053\u308C\u306F\u3042\u‌​308B");

Respondido el 13 de junio de 12 a las 17:06

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.