Jump to content

Caracteres estranhos no output da consola do Windows


javanoob

Recommended Posts

Vamos lá explicar umas coisas a estes utilizadores de GNU/Linux de Domingo:

O GNU/Linux está a apresntar bem o output desejado, o window$ está a apresentar mal. Se há um problema, ou um defeito, certamente que não é o no GNU/Linux.

Quase todas as distribuições de GNU/Linux já usam UTF-8 como o encoding por omissão quer nas consolas, quer em todo o sistema de ficheiros, quer nas aplicações. Não é por isso preciso configurar as consolas dessas distribuições para fazerem o que já fazem, é que para além de perda de tempo, é digamos, estupido!?

É que assim, mesmo que programe e compile em Linux. a coisa depois não funciona em Windows...

Funcionou, apenas não funcionou como esperavas...

Agora já conheces mais essa deficiência no window$, já a podes ter em conta.

Ninguém na sua perfeita saúde mental programa para a consola do window$, normalmente o que se faz, é:

* meter o terminal do window$, ou outro terminal qualquer (não a consola, nem  sua shell de CLI), a aceder a sistemas remotos com consolas e outras aplicações decentes (normalmente isso significa um *nix, como o GNU/Linux);

* instalar o cygwin e utilizar assim a consola de GNU/Linux no window$;

Link to comment
Share on other sites

Então e assim por curiosidade, como posso mudar o encoding da consola do Windows?

Não podes, acho eu. Mas mesmo se poderes é muito mais fácil simplesmente escreveres para a consola no enconding dela.

"Give a man a fish and he will eat for a day; Teach a man to fish and he will eat for a lifetime. The moral? READ THE MANUAL !"

Sign on a computer system consultant's desk

Link to comment
Share on other sites

Tipo... Podes.

Tens é usar um encoding diferente. O default do Java é o UTF-8 se não me engano. Mas podes usar outros. O encoding da consola do Windows, a CP437, aceita caracteres do tipo "á".

"Give a man a fish and he will eat for a day; Teach a man to fish and he will eat for a lifetime. The moral? READ THE MANUAL !"

Sign on a computer system consultant's desk

Link to comment
Share on other sites

Eu acho que é code page 850, ou então, Windows-1252, que é incompatível com o ISO 8859-15 (apesar de ser um superset de ISO 8859-1). É suposto no entanto que se deixe de usar estes encodings a favor do Unicode (UTF-8 e outros).

O Windows-1252, não é um standard (é proprietário da m$) e por isso levanta alguns problemas de compatibilidade com outros sistemas e também tem algumas limitações.

Link to comment
Share on other sites

Tens alguns problemas, primeiro, a consola do windows não suporta UT8, seja de que forma for. Segundo, a JVM quando inicia vai obter o seu encoding ao sistema, neste caso ao Windows, ficas assim com a JVM a pensar que tudo o que queres escrever tem de estar em CP1252 enquanto que na verdade, para a consola, tem de ser em 850.

Se o objectivo é escrever para consolas windows podes simplesmente dizer que encoding usar:

    public static void main(String args[]) {
        String str = "Acentuação problemática";
        try {
            Writer out = new BufferedWriter(new OutputStreamWriter(System.out, "Cp850"));
            out.write(str);
            out.flush();
            out.close();
        } catch (Exception e) {
        //ignore
        }
    }

A classe OutputStreamWriter permite dizer em que encoding queres escrever, ao construirmos uma stream desse tipo podemos indicar o encoding no qual vamos queres transformar os nosso caracteres.

No entanto este código funciona apenas para a consola do Windows, se tentares usar o teu programa noutra consola com um encoding diferente voltas a ter o problema inicial. Esta é uma solução que limita muito a portabilidade, mas com alguma alteração ao código pode ser tornada mais portável, talvez até completamente portável, mas não arrisco dizer isso sem confirmar.

Já agora, eu coloquei o texto com acentuação mas as recomendações de java é que todo o texto seja colocado com os códigos UTF para evitar problemas com o encoding dos ficheiros de código.

Espero que sirva.

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.