• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

javanoob

Caracteres estranhos no output da consola do Windows

23 mensagens neste tópico

Boas pessoal,

Ajudem-me aqui com uma noobice:

Quando faço

System.out.println("Olá");

isto, no output da consola em ambiente Windows Xp aparece-me um caracter estranho no lugar do "á".

Como faço para aparecer "Olá" correctamente?

Obrigado!

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Penso que tens que usar o caracter correspondente na tabela ASCII.

Esse caracter não faz parte do charset que qualquer compilador utiliza.

Penso eu de que... :nono1:

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Penso que tens que usar o caracter correspondente na tabela ASCII.

Esse caracter não faz parte do charset que qualquer compilador utiliza.

Penso eu de que... :nono1:

Mas, no Linux funciona!

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Isso é do enconding do Ficheiro Java, o encoding std do linux é diferente do windows logo tens de usar um encoding como UTF8.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Isso é do enconding do Ficheiro Java, o encoding std do linux é diferente do windows logo tens de usar um encoding como UTF8.

Como é que se vê o encoding de um ficheiro em ambientes Windows?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Não faço ideia lol já a algum tempo que apenas uso windows para jogar (pouco) e fazer mais 2 ou 3 coisas.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Claro que em GNU/Linux funciona! GNU/Linux suporta encodings de forma decente... A m$ à muito tempo que cagou na interface de CLI do window$.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Então e como é que posso resolver este problema?

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

Epah, deve haver por aí pessoal com o mesmo problema, como é que resolveram?

Bom fim-de-semana!

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Cinge-te ao belo do 7bit ascii e não terás problemas. Isso exclui éàç e por aí föra :-)

P.S: Qualquer das formas, nem sempre este será o desejavel procedimento, portanto, poderás sempre tentar um export LANG=pt_PT.UTF-8 no Linux, que deverá ser compatível com o windows.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Mas o problema não está no linux mas sim naquela coisa que o windows tem e que teimam em chamar consola.

O problema é mesmo do "consola" do windows e não do encoding. Já tinha tido problemas com o windows a nível gráfico agora está é nova ai ai

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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$;

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros 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.
0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Não acredito que não possa programar para Windows com caracteres do tipo "á", tem de haver alguma coisa que está a falhar aqui.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros 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 "á".

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros 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.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros 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.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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.

E já agora, que códigos UTF são esses?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

São os códigos UTF para cada tecla. Se usares windows abre o mapa de caracteres, se reparares quando escolhes um caracter, no fundo esquerdo da janela, aparece um número tipo U+00E1, este é o código UTF do caracter "á".

Para evitar problemas com o encoding dos ficheiros de código, todo o texto que contenha caracteres deste tipo, caracteres com acentuação, deverá ser escrito usando o código correspondente. Isto pode ser tedioso mas o java possui um aplicativo para fazer isso automáticamente, se não me engano.

Já agora, um código UTF coloca-se no texto assim: "\u00e1".

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Não, quero mesmo dizer UTF, como em UTF8, UTF16, UTF32, acrónimo de Unicode Transformation Format. Um dos mecanismos de implementação do Unicode. É claro que o código que dei como exemplo é UTF8 mas poderia ser outro encoding como o UTF16, no entanto o UTF8 é o mais usado e suportado.

Podia ter dito Unicode mas Unicode não é um encoding e queria indicar que me referia ao encoding e não ao sistema.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora