Estou fazendo integração com SAT e o retorno do métodoConsultarSAT(numSessao) está vindo com caracteres especiais:
816321|08000|SAT-CFe em opera��o.||
Acontece que a DLL do emulador do SAT retorna uma String com página de código em CP1252(windows-1252).
Minha aplicação java está configurada em UTF-8, se eu mudar para windows-1252 imprime o texto com os caracteres especiais na forma correta, mas acontece que não quero mudar a minha aplicação de UTF-8 para windows-1252.
Então o que preciso é converter em tempo de execução uma string em windows-1252 para UTF-8.
Fiz assim:
String novaString = new String(retorno.getBytes("CP1252"), "UTF-8");
// e assim
String novaString = new String(retorno.getBytes("windows-1252"), "UTF-8");
Testei este código aqui diretamente com o emulador SAT, mas o resultado foi este:
SAT-CFe em opera??o
O engraçado é que se eu mudo a aplicação no netbeans para windows-1252 funciona tudo perfeitamente sem conversão nenhuma, mas quando a aplicação está em UTF-8 e precisa fazer a conversão, não funciona…
Você deve ser lembrar que dependendo do meio que está utilizando para ver a saída, esse meio pode fazer a conversão dos caracteres automática para aqueles caracteres que o meio suporta. Por exemplo, se a saída for o prompt do DOS, e assim por diante.
Apparently, the console encoding happens to be the same as the project encoding; attempting to change this by setting the file.encoding System property yields nothing. In this case, all UTF-8 encoded strings will be displayed without issues. However, if your file happens to be encoded with UTF-16BE/LE or any other encoding scheme, then the console will display gibberish/mojibake as it is impossible to change the terminal/console encoding on an as needed basis. In this case, the preferred approach is to store files in the same encoding as the project encoding, so that displaying their contents via System.out will not result in displaying gibberish.