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.

Foi útil?

Solução

Você precisa alterar o código do idioma antes de iniciar a JVM;ver:

Java, ID do erro 4163515

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top