2011-01-10 10 views
6

Quiero escribir "árabe" en el paquete de recursos de mensajes (propiedades) de archivos, pero cuando trato de guardarlo consigo este error:Java: ¿Cómo escribir "árabe" en el archivo de propiedades?

"Guardar no pudo finalizarse que algunos caracteres no se puede asignar el uso de" ISO -85591-1 "codificación de caracteres. Cambie la codificación o elimine el carácter ..."

¿Puede alguien guiar por favor?

Quiero escribir:

global.username = اسم المستخدم

¿Cómo debo escribir en árabe de "nombre de usuario" en el archivo de propiedades? Por lo tanto, que la internacionalización funciona ..

BR SC

Respuesta

5

Como se describe en la referencia de la clase de "Propiedades"

The load(Reader)/store(Writer, String) methods load and store properties from and to a character based stream in a simple line-oriented format specified below. The load(InputStream)/store(OutputStream, String) methods work the same way as the load(Reader)/store(Writer, String) pair, except the input/output stream is encoded in ISO 8859-1 character encoding. Characters that cannot be directly represented in this encoding can be written using Unicode escapes ; only a single 'u' character is allowed in an escape sequence. The native2ascii tool can be used to convert property files to and from other character encodings.

0

Si está utilizando Eclipse, puede elegir la opción "Ventana -> Preferencias "y luego filtrar en" tipos de contenido ". Entonces debería poder establecer la codificación predeterminada. Hay una captura de pantalla que muestra esto en la parte superior de this post.

+0

¿Y cómo va a ayudar esto exactamente? – jarnbjo

+1

Así es como configuré la codificación para el archivo de propiedades cuando encontré el mismo mensaje de error al intentar hacer algo similar. – smcmahon

4

Propiedades basadas en recursos paquetes deben ser codificados en ISO-8859-1 a utilizar el mecanismo de carga por defecto, pero lo han utilizado con éxito este código para permitir que los archivos de propiedades a ser codificado en UTF-8:

private static class ResourceControl extends ResourceBundle.Control { 
    @Override 
    public ResourceBundle newBundle(String baseName, Locale locale, 
      String format, ClassLoader loader, boolean reload) 
      throws IllegalAccessException, InstantiationException, 
      IOException { 
     String bundlename = toBundleName(baseName, locale); 
     String resName = toResourceName(bundlename, "properties"); 
     InputStream stream = loader.getResourceAsStream(resName); 
     return new PropertyResourceBundle(new InputStreamReader(stream, 
       "UTF-8")); 
    } 

} 

Luego, por supuesto que hay que cambiar la codificación del propio archivo a UTF-8 en su IDE, y se pueden utilizar de esta manera:

ResourceBundle bundle = ResourceBundle.getBundle(
    "package.Bundle", new ResourceControl()); 
+0

Gracias pero estoy hablando de editor que puede guardar el texto escrito en árabe. – SmoothCriminel

+0

@SmoothCriminel: y te digo que el editor no es el principal problema: cualquier editor de texto decente te permitirá elegir la codificación (como te dice el mensaje de error). Pero eso no lo ayudará un poco cuando la clase MessageBundle insista en interpretar el archivo como ISO-8859-1 –

+0

OK cool thankx. ¡¡¡Lo entiendo ahora!!! – SmoothCriminel

0

esto es principalmente un problema de configuración del editor. Si está trabajando en Windows, puede editar el texto en un editor que admita UTF-8. El editor integrado de Notepad o Eclipse debería ser más que suficiente, siempre que haya guardado el archivo como UTF-8. En Linux, he usado gedit y emacs con éxito. En el Bloc de notas, puede hacer esto haciendo clic en el botón "Guardar como" y eligiendo la codificación "UTF-8". Otros editores deben tener una función similar. Algunos editores pueden requerir un cambio de fuente para mostrar las letras correctamente, pero parece que no tienes este problema.

Habiendo dicho eso, hay otros pasos a considerar al realizar i18n para árabe. Puede encontrar algunos enlaces útiles a continuación. Asegúrese de utilizar native2ascii en el archivo de propiedades antes de usarlo, de lo contrario, podría no funcionar. Pasé mucho tiempo hasta que me di cuenta de esto.

Tomcat webapps

Using nativ2ascii with properties files

1

new String(ret.getBytes("ISO-8859-1"), "UTF-8"); trabajó para mí. archivo de propiedad guardado en ISO-8859-1 Encodiing.

Cuestiones relacionadas