Charsets e consoles

6 respostas
gcobr

Caríssimos

Verifiquei que o encode usado pelo prompt do DOS quando rodamos aplicações Java de linha de comando no Windows é o Cp850.
Por causa disso, para conseguirmos apresentar caracteres acentuados de maneira correta no console temos que converter o UTF-8 das strings do Java para o Cp850 usando um OutputStreamWriter:

OutputStreamWriter o = new OutputStreamWriter(System.out, "Cp850");		
PrintWriter pw = new PrintWriter(o, true);
pw.println("àáçã");

Meu problema é que minha aplicação tem que rodar também em diferentes versões de Solaris e Linux.

Como é que eu vou saber que encode usar para o terminal de cada um destes sistemas a fim de criar o OutputStreamWriter certo? Será que tem como descobrir isso a partir de alguma coisa na System ou na Runtime?

Vi que o Java 6 traz uma novidade, o System.console() que retorna uma instancia de java.io.Console, na qual temos um método writer() que retorna um java.io.PrintWriter já configurado para converter os caracteres para o encode do console da plataforma que você estiver usando.

Infelizmente tenho que rodar isso com Java 5 ainda e estou odiando a idéia de ter que passar por parâmetro para minha aplicação.

Alguém tem alguma idéia?

Talvez ler alguma variável de ambiente do SO?

Obrigado.

6 Respostas

T

Quanto a “terminal de Linux e Solaris” você quer dizer qual terminal?

  • O console texto que só pode ser acessado localmente
  • O acesso via telnet ou ssh
  • Um terminal serial vt100, ANSI etc.
  • xterm
  • o terminal Gnome
  • o terminal KDE

Apenas o KDE está disponível só no Linux (e acho que no Nexenta, uma versão do OpenSolaris baseada em Ubuntu). As outras opções estão disponíveis tanto para Linux quanto para Solaris.

Cada um deles tem opiniões diferentes sobre “character encodings”. O problema é mais chato que parece, e é melhor testar :frowning:

gcobr

thingol:
Quanto a “terminal de Linux e Solaris” você quer dizer qual terminal?

  • O console texto que só pode ser acessado localmente
  • O acesso via telnet ou ssh
  • Um terminal serial vt100, ANSI etc.
  • xterm
  • o terminal Gnome
  • o terminal KDE

:smiley: Bem … se eu conseguisse resolver para Telnet e SSH já estaria muito feliz!

T

Ohoh - telnet e ssh? Qual é o programa que você vai usar? Por exemplo, o putty se comporta de um jeito, o telnet do Windows de outra maneira etc.

gcobr

thingol:
Ohoh - telnet e ssh? Qual é o programa que você vai usar? Por exemplo, o putty se comporta de um jeito, o telnet do Windows de outra maneira etc.
Putty já resolveria, mas acredito que praticamente todos os clientes SSH e Telnet sejam configuráveis no que diz respeito a charset, com exceção dos muito básicos como o telnet do Windows. Será q estou certo?

gcobr

Estive investigando mais a fundo e constatei que a configuração do Putty é para que ele dê uma correta interpretação aos caracteres que ele recebe do console. Assim, quem usa o putty precisa saber qual é encode que aquele terminal está usando.

Como será que se descobre isso?

T

Na prática, se você não quer ter dores de cabeça com acentos (ou seja, seu sistema não deve requerer nenhuma configuração, não use acentos).

Provavelmente seu sistema terá de fazer alguma configuração, e ler alguma variável de ambiente que indique o encoding (como “LANG” ou coisa parecida).

Criado 16 de maio de 2007
Ultima resposta 17 de mai. de 2007
Respostas 6
Participantes 2