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:
StringnovaString=newString(retorno.getBytes("CP1252"),"UTF-8");// e assimStringnovaString=newString(retorno.getBytes("windows-1252"),"UTF-8");
o que seria este método getRawBytes(), o cara que postou a solução nao diz nada deste método que ele usa na solução…
C
Cindy_de_Albuquerque
O método getRawBytes é da biblioteca ZXing, que retorna um array de bytes. É algo irrelevante para o seu problema.
Fiz um teste aqui: meu projeto está como UTF-8 e tentei rodar o seguinte code snipet e funcionou:
publicstaticvoidmain(String[]args){Stringretorno="áéíóúãõç!@#$%¨&*()ÁÉÍÓÚÀàâÊÔ";StringnovaString=null;try{novaString=newString(retorno.getBytes("windows-1252"),"windows-1252");}catch(UnsupportedEncodingExceptione){// TODO Auto-generated catch blocke.printStackTrace();}System.out.println("NovaString: "+novaString);}
R
Rodrigo1895
Fiz o teste com este seu código e também funcionou…
Minha situação é a seguinte:
A aplicação java no netbeans está configurada em UTF-8, e a string de retorno que recebo do emulador SAT vem em windows-1252.
Se eu altero a minha aplicação no netbeans para windows-1252, os caracteres são exibidos corretamente…
Mas tenho que deixar minha aplicação em UTF-8.
O problema é que não estou conseguindo converter a string de retorno de windows-1252 para UTF-8.
C
Cindy_de_Albuquerque
Manda um exemplo de String de retorno para eu testar aqui.
O projeto é Web ou standalone?
R
Rodrigo1895
O projeto é Desktop, estou usando a DLL do emulador SAT da fazenda
A DLL retorna String em cp1252(windows-1252)
Retornos possíveis:
Emitido com sucesso + conteúdo nota
SAT em operação
C
Cindy_de_Albuquerque
publicstaticvoidmain(String[]args)throwsUnsupportedEncodingException{Stringretorno="Emitido com sucesso + conteúdo nota SAT em operação";InputStreamstream=newByteArrayInputStream(retorno.getBytes("windows-1252"));BufferedInputStreamiStream=newBufferedInputStream(stream);InputStreamReaderreader=newInputStreamReader(iStream,"UTF-8");StringnovaString=getStringFromInputStream(iStream);System.out.println("NovaString: "+novaString);}privatestaticStringgetStringFromInputStream(InputStreamis){BufferedReaderbr=null;StringBuildersb=newStringBuilder();Stringline;try{br=newBufferedReader(newInputStreamReader(is));while((line=br.readLine())!=null){sb.append(line);}}catch(IOExceptione){e.printStackTrace();}finally{if(br!=null){try{br.close();}catch(IOExceptione){e.printStackTrace();}}}returnsb.toString();}
R
Rodrigo1895
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…
C
cviniciusm
Olá,
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.
R
Rodrigo1895
Já testei 2 tipos de saída:
System.out.println(); direto no netbeans.
e
gravando em um arquivo .txt
C
cviniciusm
Olá,
A console do NetBeans utiliza qual conjunto de caracteres ?
R
Rodrigo1895
Acho que é UTF-8.
Onde vejo esta informação?
Clicando em propriedades no projeto, tem a opção “Codificação”, lá está UTF-8, é isto?
C
cviniciusm
Olá,
Questionamento semelhante no StackOverflow:
E a seguinte observação:
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.
R
Rodrigo1895
Então, mas acho que o problema não é a codificação do console, pois já tentei armazenar em um arquivo, e continua com o problema…