Boa tarde galera, estou desenvolvendo uma aplicação onde ela pode ser rodada em modo console e modo gráfico, e para o modo gráfico estou fazendo um console com o JTextArea. O modo que eu fiz printar o console é bastante simples, mudei o inputstream do programa para o JTextArea, mas por algum motivo caracteres unicode não são reconhecidos, aparecendo só um monte de letras sem sentido.
Segue meu código
OutputStream o = new OutputStream() {
@Override
public void write(int b) throws IOException {
StringBuffer buf = new StringBuffer(buffer);
if(b != '\n')
{
buf.append((char) b);
buffer = buf.toString();
}
else
{
insereLinha(buf.toString());
buffer = "";
}
}
};
System.setOut(new PrintStream(o));
System.setErr(new PrintStream(o));
Gostaria de saber como faria para que o System.out.println não fizesse aparecer essas letras sem sentido.
Vou fazer um resuminho, caso você não entenda inglês.
Basicamente o colega que respondeu lá explica que a JVM espera que o encoding de caracteres usado pelo console do sistema, seja o mesmo que o default do sistema. Mas o Windows usa 2 encodings diferentes (ANSI como default, e OEM para o console).
Então quando você tenta escrever caracteres Unicode, a JVM interpreta isso como sendo ANSI, e por isso aparecem os caracteres doidos.
Por fim ele recomenda não usar System.out.println, mas sim o código abaixo:
System.console().writer().println()
Não cheguei a testar essa solução, mas me parece bem sensata.
Vou fazer um resuminho, caso você não entenda inglês.
Basicamente o colega que respondeu lá explica que a JVM espera que o encoding de caracteres usado pelo console do sistema, seja o mesmo que o default do sistema. Mas o Windows usa 2 encodings diferentes (ANSI como default, e OEM para o console).
Então quando você tenta escrever caracteres Unicode, a JVM interpreta isso como sendo ANSI, e por isso aparecem os caracteres doidos.
Por fim ele recomenda não usar System.out.println, mas sim o código abaixo:
System.console().writer().println()
Não cheguei a testar essa solução, mas me parece bem sensata.
Teste aí e avise se funciona! ;)
Tentei e infelizmente não funcionou, fica dando NullPointerException. =/
Vou fazer um resuminho, caso você não entenda inglês.
Basicamente o colega que respondeu lá explica que a JVM espera que o encoding de caracteres usado pelo console do sistema, seja o mesmo que o default do sistema. Mas o Windows usa 2 encodings diferentes (ANSI como default, e OEM para o console).
Então quando você tenta escrever caracteres Unicode, a JVM interpreta isso como sendo ANSI, e por isso aparecem os caracteres doidos.
Por fim ele recomenda não usar System.out.println, mas sim o código abaixo:
System.console().writer().println()
Não cheguei a testar essa solução, mas me parece bem sensata.
Teste aí e avise se funciona! ;)
Tentei e infelizmente não funcionou, fica dando NullPointerException. =/