Preciso usar UTF-8 nas propriedades de meus recursos usando Java ResourceBundle
. Quando insiro o texto diretamente no arquivo de propriedades, ele é exibido como mojibake.
Meu aplicativo é executado no Google App Engine.
Alguém pode me dar um exemplo? Eu não consigo esse trabalho.
java.util.ResourceBundle
, nãojava.util.Properties
.Respostas:
Os
ResourceBundle#getBundle()
usos ocultosPropertyResourceBundle
quando um.properties
arquivo é especificado. Por sua vez, isso é usado por padrãoProperties#load(InputStream)
para carregar esses arquivos de propriedades. De acordo com o javadoc , eles são lidos por padrão como ISO-8859-1.Portanto, você precisará salvá-los como ISO-8859-1. Se você tiver algum caractere além do intervalo ISO-8859-1 e não puder usá-
\uXXXX
lo em cima da cabeça e for forçado a salvar o arquivo como UTF-8, precisará usar a ferramenta native2ascii para converter um arquivo. Arquivo de propriedades salvas UTF-8 em um arquivo de propriedades salvas ISO-8859-1, em que todos os caracteres descobertos são convertidos em\uXXXX
formato. O exemplo abaixo converte um arquivo de propriedades codificado em UTF-8text_utf8.properties
em um arquivo de propriedades codificado em ISO-8859-1 válidotext.properties
.Ao usar um IDE sensato como o Eclipse, isso já é feito automaticamente quando você cria um
.properties
arquivo em um projeto baseado em Java e usa o próprio editor do Eclipse. O Eclipse converterá de forma transparente os caracteres além do intervalo ISO-8859-1 em\uXXXX
formato. Veja também as capturas de tela abaixo (observe as guias "Propriedades" e "Origem" na parte inferior, clique para ampliar):Como alternativa, você também pode criar uma
ResourceBundle.Control
implementação customizada na qual você lê explicitamente os arquivos de propriedades como UTF-8InputStreamReader
, para que você possa salvá-los como UTF-8 sem a necessidade de se preocupar com issonative2ascii
. Aqui está um exemplo de kickoff:Isso pode ser usado da seguinte maneira:
Veja também:
fonte
StandardCharsets.UTF_8
se estiver usando Java 7+Dado que você possui uma instância do ResourceBundle e pode obter String:
Resolvi meu problema de exibição em japonês:
fonte
veja isto: http://docs.oracle.com/javase/6/docs/api/java/util/Properties.html#load(java.io.Reader)
as propriedades aceitam um objeto Reader como argumentos, que você pode criar a partir de um InputStream.
no momento da criação, você pode especificar a codificação do Reader:
aplique este Reader ao método de carregamento:
BTW: obtenha o fluxo do arquivo .properties :
BTW: obtenha o pacote de recursos de
InputStreamReader
:espero que isso possa ajudá-lo!
fonte
ResourceBundle
, no entanto.Properties
e quiser recuperarUTF-8
String, pois isso funciona como um encanto. No entanto, paraResourceBundle
recursos como o idioma, a resposta aceita é elegante. No entanto, votou a resposta.ResourceBundle rb = new PropertyResourceBundle(new InputStreamReader(stream, "UTF-8"))
ResourceBundle.Control
com UTF-8 e novos métodos String não funcionam, se o arquivo de propriedades usa cp1251 charset, por exemplo.Por isso, recomendei usando um método comum: escreva em símbolos unicode . Por esta:
IDEA - possui uma opção especial " Conversão transparente de nativo para ASCII " (Configurações> Codificação de arquivo).
Eclipse - possui um plugin " Editor de Propriedades " . Pode funcionar como aplicativo separado.
fonte
Este problema foi finalmente corrigido no Java 9: https://docs.oracle.com/javase/9/intl/internationalization-enhancements-jdk-9
A codificação padrão para arquivos de propriedades agora é UTF-8.
fonte
Criamos um arquivo resources.utf8 que contém os recursos em UTF-8 e temos uma regra para executar o seguinte:
fonte
native2ascii
? Eu apenas fizfind / -name native2ascii*
e consegui nenhum resultado, então eu assumir que não é apenas uma parte do JDK ...jdk1.*.0_*/bin
.fonte
Atenção: os arquivos de propriedade java devem ser codificados na ISO 8859-1!
Propriedades do Java Document
Se você realmente deseja fazer isso: dê uma olhada em: Propriedades Java Codificação UTF-8 no Eclipse - existem algumas amostras de código
fonte
http://sourceforge.net/projects/eclipse-rbe/
como os arquivos de propriedades já declarados devem ser codificados na ISO 8859-1
Você pode usar o plugin acima para o eclipse IDE para fazer a conversão Unicode para você.
fonte
Aqui está uma solução Java 7 que usa a excelente biblioteca de suporte do Guava e a construção try-with-resources. Ele lê e grava arquivos de propriedades usando UTF-8 para obter a experiência geral mais simples.
Para ler um arquivo de propriedades como UTF-8:
Para escrever um arquivo de propriedades como UTF-8:
fonte
Como sugerido, eu passei pela implementação do pacote de recursos .. mas isso não ajudou .. como o pacote sempre foi chamado em localidade en_US ... tentei definir meu local padrão por outro idioma e ainda assim minha implementação do pacote de recursos controle estava sendo chamado com en_US ... eu tentei colocar mensagens de log e fazer uma etapa através da depuração e ver se uma chamada local diferente estava sendo feita depois que eu mudei a localidade em tempo de execução através das chamadas xhtml e JSF ... que não aconteceram ... então eu tentei fazer um sistema definido como padrão para utf8 para ler arquivos pelo meu servidor (servidor tomcat) .. mas isso causou irregularidade porque todas as minhas bibliotecas de classes não foram compiladas em utf8 e o tomcat começou a ler em formato utf8 e o servidor não estava funcionando corretamente ... então acabei implementando um método no meu controlador java para ser chamado de arquivos xhtml ..Nesse método, fiz o seguinte:
Eu estava particularmente nervoso, pois isso poderia diminuir o desempenho do meu aplicativo ... no entanto, depois de implementá-lo, parece que meu aplicativo está mais rápido agora .. acho que é porque agora estou acessando diretamente as propriedades em vez de permitir O JSF analisa seu caminho para acessar propriedades ... eu passo especificamente o argumento booleano nesta chamada porque sei que algumas das propriedades não seriam traduzidas e não precisam estar no formato utf8 ...
Agora salvei meu arquivo de propriedades no formato UTF8 e ele está funcionando bem, pois cada usuário no meu aplicativo tem uma preferência de localidade referente.
fonte
fonte
Pelo que vale a pena, meu problema foi que os arquivos em si estavam na codificação errada. Usando iconv funcionou para mim
fonte
iconv
. Eu nunca ouvi falar disso antes, mas eu digitei no console e eis que, é uma coisa que existe (em CentOS 6, de qualquer maneira.)Tentei usar a abordagem fornecida por Rod, mas levando em consideração a preocupação do BalusC em não repetir a mesma solução alternativa em todos os aplicativos e viemos com esta classe:
A maneira de usar isso seria muito semelhante ao uso regular do ResourceBundle:
Ou você pode usar o construtor alternativo que usa UTF-8 por padrão:
fonte
Abra a caixa de diálogo Configurações / Preferências ( Ctrl+ Alt+ S) e clique em Editor e codificações de arquivo.
Então, na parte inferior, você encontrará as codificações padrão para os arquivos de propriedades. Escolha o seu tipo de codificação.
Como alternativa, você pode usar símbolos unicode em vez de texto em seu pacote de recursos (por exemplo,
"ів"
igual a\u0456\u0432
)fonte
No Java 9, o padrão para carregar o arquivo de propriedades foi alterado para UTF-8. https://docs.oracle.com/javase/9/intl/internationalization-enhancements-jdk-9.htm
fonte