Problemas com acentuação em programas java no prompt de comando do Windows

Quem já executou um programa java no console (prompt de comando) do Windows provavelmente já conhece o problema: algumas letras acentuadas não aparecem corretamente. O problema é antigo e o pessoal da Sun já disse que não vai arrumar, veja bug, bug, bug.

Este problema acontece porque o Windows separa a codificação do console (OEM por padrão) da codificação das demais aplicações (ANSI por padrão). Quando a máquina virtual java é iniciada ela assume a codificação das demais aplicações e não a do console.

Vamos usar o código a seguir para ver como isso tudo funciona:

1
2
3
4
5
6
7
8
9
10
11
public class Acentos {
    public static void main(String[] args) {
        System.out.println("file.encoding=" + System.getProperty("file.encoding"));
        System.out.println("aŕáâã");
        System.out.println("ečéê");
        System.out.println("iěí");
        System.out.println("oňóôõ");
        System.out.println("uůúü");
        System.out.println("cç");
    }
}

Ao compilar e executar o código temos o seguinte resultado:

Console imprimindo acentos com duas codificações diferentes

O comando chcp exibe a codificação usada no console, que no caso é 850 (ou Cp850, de CodePage). Na linha 3 é impresso a codificação que o java está utilizando, no caso Cp1252. Como as codificações são diferentes algumas letras acentuadas são não aparecem corretamente. Para resolver o problema temos que fazer as codificações coincidirem. Neste caso existe duas opções, alterar a codificação do console ou disser para o java utilizar outra codificação. A segunda solução é rápida e direta, basta mudar o valor da propriedade file.encoding para cp850. Esta opção não é muito robusta pois exige a mudança na chamada do java para todos os programas.

A outra opção é mudar a codificação do console, isto pode ser feito com o comando chcp 1252. Para esta solução funcionar é preciso alterar a fonte do console. Clique no ícone no canto superior esquerdo da janela do console, selecione “Propriedades” e altere a fonte para “Lucida Console”. Veja o resultado abaixo.

Console imprimindo acentos com duas codificações diferentes 2

Para torna a alteração da fonte permanente, clique no ícone no canto superior esquerdo da janela do console, e selecione “Padrão”. Feche o console e abra novamente e você verá que a fonte foi alterada, no entanto, ao executar o comando chcp a codificação ainda continua sendo 850. Para mudar a codificação do console é preciso editar o registro, procure a chave \HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\Nls\CodePage\OEMCP e altere o valor para 1252. Reinicie o computador e pronto!

Editando o registro do windows para alterar OEMCP para 1252

Não quis comentar inicialmente, mas ainda existe uma outra solução, que além de acabar com este problema resolve diversos outros: trocar o Windows pelo Ubuntu!

Sem categoria

Se gostou da matéria deixe um comentário or subscribe to the feed and get future articles delivered to your feed reader.

Comentários

Nenhum comentário ainda.

Deixe um comentário

(obrigatório)

(obrigatório)