Erro em conversão de String

Recebo uma string em formato windows-1252, assim:

opera��o.

Minha aplicação java no netbeans 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");

Mas continua com os caracteres especiais errados…

Como posso converter uma string de windows-1252 para UTF-8

Como você está recebendo essa string? De onde ela está vindo?

Ela está vindo do retorno do emulador SAT(aparelho para emissão de cupom fiscal que está substituindo as impressoras fiscais).

Ele retorna uma String em windows-1252.

Gostaria de ver mais do seu código… como vc esta setando o valor em retorno?

Faço assim:

    SatJNA sat = SatJNA.Instance;
    //EnviarDadosVenda é um método da DLL do SAT, este método que retorna a String em windows-1252
    String retorno = sat.EnviarDadosVenda(numSessao, LerArquivoSat.getCodigoAtivacao(), os.toString());

EnviarDadosVendas retorna uma String?

Faça retornar um vetor de bytes assim:

byte[] retorno = sat.EnviarDadosVenda(numSessao, LerArquivoSat.getCodigoAtivacao(), os.toString());
String novaString = new String(retorno, "UTF-8");

Adendo:
Pelo que entendi ali agora, você não pode mexer no método EnviarDadosVendas porque esta encapsulado?

String retorno = sat.EnviarDadosVenda(numSessao, LerArquivoSat.getCodigoAtivacao(), os.toString());
 String novaString = new String(retorno.getBytes, "UTF-8");

Fiz assim:

String retorno = sat.EnviarDadosVenda(numSessao, LerArquivoSat.getCodigoAtivacao(), os.toString());
String novaString = new String(retorno.getBytes(), "UTF-8");
System.out.println("NovaString: " + novaString);

mas continua exibindo errado…

Também tentei assim, mas também continuou errado:

String retorno = sat.EnviarDadosVenda(numSessao, LerArquivoSat.getCodigoAtivacao(), os.toString());
String novaString = new String(retorno.getBytes("windows-1252"), "UTF-8");
System.out.println("NovaString: " + novaString);]]

Saída da string:
|Emitido com sucesso + conte?do notas

Vamos fazer de um jeito mais feio então:

String retorno = sat.EnviarDadosVenda(numSessao, LerArquivoSat.getCodigoAtivacao(), os.toString());
String utf16 = new String(retorno , Charset.forName("windows-1252"));
String novaString = new String(utf16.getBytes(StandardCharsets.UTF_8));

Se o código acima não funcionar, me da um exemplo de valor que retorno pode receber, pra eu poder fazer alguma coisa debugando por aqui.

Tentei assim:

String retorno = sat.EnviarDadosVenda(numSessao, LerArquivoSat.getCodigoAtivacao(), os.toString());
String utf16 = new String(retorno.getBytes(), Charset.forName("windows-1252"));
String novaString = new String(utf16.getBytes(StandardCharsets.UTF_8));

a saída de novaString foi esta:

Emitido com sucesso + conte�do nota
O conteudo do Retorno do SAT pode receber, por exemplo:

Emitido com sucesso + conteúdo nota
SAT em operação

Alguém com mais alguma sugestão?

Tinha montado um exemplo aqui, mas obtendo o texto em windows-1252 de um arquivo txt (lendo com Scanner). Fiz a leitura como windows-1252 e funcionou corretamente (vou pegar o código que fiz e vou postar aqui amanhã).

Ok, quando puder posta aqui

Vlw