Necesito usar UTF-8 en mis propiedades de recursos usando Java ResourceBundle
. Cuando ingreso el texto directamente en el archivo de propiedades, se muestra como mojibake.
Mi aplicación se ejecuta en Google App Engine.
¿Alguien puede darme un ejemplo? No puedo conseguir este trabajo.
java.util.ResourceBundle
, nojava.util.Properties
.Respuestas:
Los
ResourceBundle#getBundle()
usos debajo de las cubiertasPropertyResourceBundle
cuando.properties
se especifica un archivo. Esto a su vez usa de forma predeterminadaProperties#load(InputStream)
para cargar esos archivos de propiedades. Según el javadoc , se leen por defecto como ISO-8859-1.Por lo tanto, deberá guardarlos como ISO-8859-1. Si tiene caracteres más allá del rango ISO-8859-1 y no puede usar
\uXXXX
la parte superior de la cabeza y, por lo tanto, se ve obligado a guardar el archivo como UTF-8, entonces necesitará usar la herramienta native2ascii para convertir un El archivo de propiedades guardadas UTF-8 en un archivo de propiedades guardadas ISO-8859-1 en el que todos los caracteres descubiertos se convierten en\uXXXX
formato. El siguiente ejemplo convierte un archivo de propiedades codificado UTF-8text_utf8.properties
en un archivo de propiedades codificado ISO-8859-1 válidotext.properties
.Cuando se usa un IDE sano como Eclipse, esto ya se hace automáticamente cuando se crea un
.properties
archivo en un proyecto basado en Java y se usa el propio editor de Eclipse. Eclipse convertirá de forma transparente los caracteres más allá del rango ISO-8859-1 al\uXXXX
formato. Vea también las capturas de pantalla a continuación (observe las pestañas "Propiedades" y "Fuente" en la parte inferior, haga clic para ampliar):Alternativamente, también puede crear una
ResourceBundle.Control
implementación personalizada en la que lea explícitamente los archivos de propiedades como UTF-8InputStreamReader
, de modo que pueda guardarlos como UTF-8 sin la necesidad de molestarsenative2ascii
. Aquí hay un ejemplo inicial:Esto se puede usar de la siguiente manera:
Ver también:
fuente
StandardCharsets.UTF_8
si está usando Java 7+Dado que tiene una instancia de ResourceBundle y puede obtener String:
Resolví mi problema de visualización en japonés de la siguiente manera:
fuente
mira esto: http://docs.oracle.com/javase/6/docs/api/java/util/Properties.html#load(java.io.Reader)
las propiedades aceptan un objeto Reader como argumentos, que puede crear desde un InputStream.
en el momento de la creación, puede especificar la codificación del lector:
luego aplique este lector al método de carga:
Por cierto: obtener la secuencia del archivo .properties :
Por cierto: obtenga el paquete de recursos de
InputStreamReader
:Espero que esto le pueda ayudar !
fuente
ResourceBundle
embargo, la pregunta real aquí es sobre .Properties
y desea recuperarUTF-8
String, entonces esto funciona como un encanto. Sin embargo, paraResourceBundle
recursos lingüísticos, la respuesta aceptada es elegante. Sin embargo, votó la respuesta.ResourceBundle rb = new PropertyResourceBundle(new InputStreamReader(stream, "UTF-8"))
ResourceBundle.Control
con UTF-8 y los nuevos métodos de cadena no funcionan, si el archivo de propiedades usa el juego de caracteres cp1251, por ejemplo.Así que recomendé usar un método común: escribir en símbolos unicode . Para esto:
IDEA - tiene una especial " Transparente conversión nativa a ASCII " opción (Ajustes> Codificación de archivos).
Eclipse : tiene un complemento " Editor de propiedades " . Puede funcionar como aplicación separada.
fuente
Este problema finalmente se ha solucionado en Java 9: https://docs.oracle.com/javase/9/intl/internationalization-enhancements-jdk-9
La codificación predeterminada para los archivos de propiedades ahora es UTF-8.
fuente
Creamos un archivo resources.utf8 que contiene los recursos en UTF-8 y tenemos una regla para ejecutar lo siguiente:
fuente
native2ascii
? Simplemente lo hicefind / -name native2ascii*
y no obtuve resultados, así que supongo que no es solo parte del JDK ...jdk1.*.0_*/bin
.fuente
Atención: ¡los archivos de propiedades de Java deben estar codificados en ISO 8859-1!
@ver propiedades Java Doc
Si todavía desea hacer esto: eche un vistazo a: Propiedades de Java UTF-8 codificación en Eclipse : hay algunos ejemplos de código
fuente
http://sourceforge.net/projects/eclipse-rbe/
como ya se indicó, los archivos de propiedades deben codificarse en ISO 8859-1
Puede usar el complemento anterior para eclipse IDE para realizar la conversión Unicode por usted.
fuente
Aquí hay una solución Java 7 que utiliza la excelente biblioteca de soporte de Guava y la construcción de prueba con recursos. Lee y escribe archivos de propiedades utilizando UTF-8 para la experiencia general más simple.
Para leer un archivo de propiedades como UTF-8:
Para escribir un archivo de propiedades como UTF-8:
fuente
Como uno sugirió, pasé por la implementación del paquete de recursos ... pero eso no ayudó ... ya que el paquete siempre se llamaba en en_US locale ... intenté establecer mi configuración regional predeterminada en un idioma diferente y aún así mi implementación del paquete de recursos Se estaba llamando al control con en_US ... intenté poner mensajes de registro y hacer un paso a través de la depuración y ver si se estaba haciendo una llamada local diferente después de cambiar la configuración regional en tiempo de ejecución a través de llamadas xhtml y JSF ... eso no sucedió ... luego traté de establecer un sistema predeterminado en utf8 para leer archivos de mi servidor (servidor tomcat) ... pero eso causó pronlem ya que todas mis bibliotecas de clases no se compilaron bajo utf8 y tomcat comenzó a leer en formato utf8. y el servidor no funcionaba correctamente ... luego terminé implementando un método en mi controlador java para que se llamara desde archivos xhtml ...en ese método hice lo siguiente:
Estaba particularmente nervioso ya que esto podría ralentizar el rendimiento de mi aplicación ... sin embargo, después de implementar esto, parece que mi aplicación es más rápida ahora ... creo que es porque ahora estoy accediendo directamente a las propiedades en lugar de permitir JSF analiza su camino para acceder a las propiedades ... específicamente paso el argumento booleano en esta llamada porque sé que algunas de las propiedades no se traducirán y no necesitan estar en formato utf8 ...
Ahora he guardado mi archivo de propiedades en formato UTF8 y funciona bien, ya que cada usuario en mi aplicación tiene una preferencia de referencia regional.
fuente
fuente
Por lo que vale la pena, mi problema fue que los archivos mismos estaban en la codificación incorrecta. Usar iconv funcionó para mí
fuente
iconv
. Nunca había oído hablar de él antes, pero lo escribí en la consola y he aquí que es algo que existe (en CentOS 6, de todos modos)Traté de usar el enfoque proporcionado por Rod, pero teniendo en cuenta la preocupación de BalusC por no repetir la misma solución en toda la aplicación, llegué a esta clase:
La forma de usar esto sería muy similar al uso regular de ResourceBundle:
O puede usar el constructor alternativo que usa UTF-8 por defecto:
fuente
Abra el cuadro de diálogo Configuración / Preferencias ( Ctrl+ Alt+ S), luego haga clic en Editor y Codificación de archivos.
Luego, en la parte inferior, encontrará codificaciones predeterminadas para archivos de propiedades. Elige tu tipo de codificación.
Alternativamente, puede usar símbolos Unicode en lugar de texto en su paquete de recursos (por ejemplo,
"ів"
igual\u0456\u0432
)fuente
Desde Java 9, el archivo de propiedades de carga predeterminado se ha cambiado a UTF-8. https://docs.oracle.com/javase/9/intl/internationalization-enhancements-jdk-9.htm
fuente