Caracteres multibyte corrompidos para ????quando lido do banco de dados e postado na página ASP usando HTTPURLConnection

StackOverflow https://stackoverflow.com/questions/5050894

Pergunta

No meu código Java, estou recuperando alguns dados multibyte do banco de dados e criando alguns DOM xml, com esses dados como o valor de algum nó, convertendo o DOM em String e postando bytest na página ASP via HTTPURLConnection, mas de alguma forma no receptor finaliza os dados está aparecendo como ????em vez de alguns valores multibyte. Por favor, sugira o que fazer.

Coisas que já estou fazendo..

1) Eu configurei -Dfile.encoding =UTF8 como propriedade do sistema 2) enquanto usa TransformerFactory para converter meu XML DOM para String , eu configurei

 transformer.setOutputProperty(OutputKeys.ENCODING, "UTF-8")

para ter certeza de que a codificação está correta ali.Por favor, sugira onde estou errando.

@Jon Skeet Mais algumas coisas para adicionar aqui ...1) Estou obtendo dados do banco de dados corretamente 2) O XML transformado também parece estar correto, conforme verifiquei salvando-o em meu sistema de arquivos local.
Para postar anteriormente eu estava usando algo como

'dout = new DataOutputStream(urlconn.getOutputStream());'  
 'dout.write(strXML.getBytes());' 
 'dout.write(strXML);' 

e os dados resultantes no receptor estavam sendo convertidos para ?????mas então eu mudei para
'

dout=new OutputStreamWriter(urlconn.getOutputStream(),"UTF8");' 
'dout.write(strXML);' 

então os dados no final do receptor parecem estar corretos ...mas o problema ocorre com a maneira como isso é tratado no receptor neste caso.no código ASP do meu receptor que estou usando objStream.WriteLine (oXMLDom.xml)...e aqui ele falha e começa a dar erro interno no servidor...por favor, sugira o que há de errado com a segunda abordagem.

Foi útil?

Solução

grande quantidade de conversões potenciais acontecendo lá.Você deve verificar os dados em cada etapa:

  • Verifique se você está retirando-o do banco de dados corretamente
  • Veja como fica o XML transformado
  • Observe o que acontece na rede (incluindo cabeçalhos HTTP)
  • Verifique exatamente o que você está obtendo no ASP

Não basta imprimir as strings como strings - registre o valor Unicode de cada caractere, convertendo-o para int:

for (int i = 0; i < text.length(); i++)
{
    char c = text.charAt(i);
    log("Character " + c + " - " + (int) c);
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top