Alterando a codificação padrão para String(byte[])
Pergunta
Existe uma maneira de alterar a codificação usada pelo construtor String(byte[]) ?
No meu próprio código eu uso String(byte[],String) para especificar a codificação, mas estou usando uma biblioteca externa que não posso alterar.
String src = "with accents: é à";
byte[] bytes = src.getBytes("UTF-8");
System.out.println("UTF-8 decoded: "+new String(bytes,"UTF-8"));
System.out.println("Default decoded: "+new String(bytes));
A saída para isso é:
UTF-8 decoded: with accents: é à Default decoded: with accents: é Ã
Eu tentei alterar a propriedade do sistema file.encoding
mas não funciona.
Solução
Você precisa alterar o código do idioma antes de iniciar a JVM;ver:
Alguns lugares parecem sugerir que você pode fazer isso definindo a variável file.encoding ao iniciar a JVM, como
java -Dfile.encoding=UTF-8 ...
... mas eu não tentei isso sozinho.A maneira mais segura é definir uma variável de ambiente no sistema operacional.
Outras dicas
Citado de conjunto de caracteres padrão()
O conjunto de caracteres padrão é determinado durante a inicialização da máquina virtual e normalmente depende da localidade e charset da operação subjacente sistema.
Na maioria dos sistemas operacionais você pode definir o conjunto de caracteres usando uma variável de ambiente.
Acho que você quer isso:System.setProperty("arquivo.encoding", "UTF-8");
Resolveu alguns problemas, mas ainda tenho outros.Os caracteres "í" e "Í" não são convertidos corretamente se o SO for ISO-8859-1.Apenas com a opção JVM na inicialização, eu resolvo.Agora, apenas meu console Java no NetBeans IDE está travando o conjunto de caracteres ao mostrar caracteres especiais.