Caracteres multibyte corruptos a ????Cuando lea de la base de datos y ha publicado en la página ASP utilizando HTTPURLCONNEPTECTORIR

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

Pregunta

En mi código de Java, estoy recuperando algunos datos multibyte de la base de datos y estoy haciendo un poco de XML DOM, con esos datos como el valor de un nodo y luego convierte el DOM para cadena y publicar la página Bytest a ASP a través de HTTPURLCONNEPTECTORION, pero de alguna manera en el receptor End los datos aparecen como ???? en lugar de algunos valores multibyte. Por favor, sugerir qué hacer.

cosas que ya estoy haciendo ...

1) He establecido -Dfile.encoding =UTF8 como propiedad del sistema 2) Mientras usa TransformerFactory para convertir mi XML DOM en cadena, he establecido

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

para asegurarse de que la codificación sea adecuada allí. Por favor, sugiera a dónde me estoy equivocado.

@jon skeet Pocos más cosas para agregar aquí ... 1) Estoy obteniendo datos de la base de datos correctamente 2) Transformed XML también parece ser adecuado, ya que verifiqué ahorrándolo a mi sistema de archivos local. Para publicar anteriormente estaba usando algo como

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

¿Y los datos resultantes en el final del receptor se convirtieron en ????? Pero luego cambié a
'

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

Luego, los datos en el final del receptor parecen ser adecuados ... pero el problema se produce con la forma en que se maneja en el extremo del receptor en este caso. En mi código ASP receptor estoy usando objStream.WriteLine (oXMLDom.xml) ... y aquí falla y comienza a dar un error interno del servidor ... Por favor, sugiera lo que está mal con el segundo enfoque.

¿Fue útil?

Solución

There are lots of potential conversions going on there. You should verify the data at every step:

  • Check that you're getting it out of the database correctly
  • See what the transformed XML looks like
  • Watch what goes over the network (including HTTP headers)
  • Check exactly what you're getting in ASP

Don't just print out the strings as strings - log the Unicode value of each character, by casting it to int:

for (int i = 0; i < text.length(); i++)
{
    char c = text.charAt(i);
    log("Character " + c + " - " + (int) c);
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top