Caractères multi-octets corrompus en ????lorsqu'il est lu à partir de la base de données et publié sur la page ASP à l'aide de HTTPURLConnection

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

Question

Dans mon code Java, je récupère des données multi-octets de la base de données et crée du DOM XML, avec ces données comme valeur d'un nœud, puis je convertis le DOM en chaîne et je publie l'octet sur la page ASP via HTTPURLConnection, mais d'une manière ou d'une autre, à la fin du récepteur, les données apparaît comme ????au lieu de certaines valeurs multi-octets. Veuillez suggérer quoi faire.

Des choses que je fais déjà..

1) J'ai défini -Dfile.encoding =UTF8 comme propriété système 2) lors de l'utilisation TransformerFactory pour convertir mon DOM XML en String, j'ai défini

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

pour vous assurer que l'encodage est correct ici.Veuillez suggérer où je me trompe.

@Jon Skeet Quelques autres choses à ajouter ici...1) J'obtiens correctement les données de la base de données 2) Le XML transformé semble également être correct, comme je l'ai vérifié en l'enregistrant sur mon système de fichiers local.
Pour poster plus tôt, j'utilisais quelque chose comme

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

et les données résultantes du côté du récepteur étaient converties en ?????mais ensuite je suis passé à
'

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

alors les données du côté du récepteur semblent être correctes...mais le problème vient de la façon dont il est traité du côté du récepteur dans ce cas.dans le code ASP de mon récepteur que j'utilise objStream.WriteLine (oXMLDom.xml)...et ici, il échoue et commence à donner une erreur de serveur interne...veuillez suggérer ce qui ne va pas avec la deuxième approche.

Était-ce utile?

La solution

Il y a beaucoup des conversions potentielles qui s'y déroulent.Vous devez vérifier les données à chaque étape :

  • Vérifiez que vous le retirez correctement de la base de données
  • Voyez à quoi ressemble le XML transformé
  • Regardez ce qui se passe sur le réseau (y compris les en-têtes HTTP)
  • Vérifiez exactement ce que vous obtenez dans ASP

Ne vous contentez pas d'imprimer les chaînes comme chaînes - enregistre la valeur Unicode de chaque caractère, en la convertissant en int:

for (int i = 0; i < text.length(); i++)
{
    char c = text.charAt(i);
    log("Character " + c + " - " + (int) c);
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top