Multibyte-Zeichen beschädigt zu ????wenn aus der Datenbank gelesen und über HTTPURLConnection auf der ASP-Seite gepostet wird

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

Frage

In meinem Java-Code rufe ich einige Multibyte-Daten aus der Datenbank ab und erstelle ein XML-DOM, mit diesen Daten als Wert eines Knotens, konvertiere dann das DOM in einen String und poste Bytes über HTTPURLConnection auf der ASP-Seite, aber irgendwie am Empfängerende die Daten erscheint als ????anstelle einiger Multibyte-Werte. Bitte schlagen Sie vor, was zu tun ist.

Dinge, die ich bereits mache.

1) Ich habe eingestellt -Dfile.encoding =UTF8 als Systemeigenschaft 2) während der Verwendung TransformerFactory Für die Konvertierung meines XML-DOM in String habe ich festgelegt

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

um sicherzustellen, dass die Kodierung dort korrekt ist.Bitte schlagen Sie vor, wo ich falsch liege.

@Jon Skeet Hier gibt es noch ein paar Dinge hinzuzufügen ...1) Ich erhalte die Daten korrekt aus der Datenbank. 2) Transformiertes XML scheint ebenfalls korrekt zu sein, wie ich überprüft habe, indem ich es in meinem lokalen Dateisystem gespeichert habe.
Für den früheren Beitrag habe ich so etwas wie verwendet

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

und die resultierenden Daten auf der Empfängerseite wurden in ????? konvertiertaber dann wechselte ich zu
'

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

dann scheinen die Daten auf der Empfängerseite korrekt zu sein ...Das Problem liegt jedoch in der Art und Weise, wie es in diesem Fall auf der Empfängerseite gehandhabt wird.in meinem Empfänger-ASP-Code, den ich verwende objStream.WriteLine (oXMLDom.xml)...Und hier schlägt es fehl und gibt einen internen Serverfehler aus ...Bitte schlagen Sie vor, was am zweiten Ansatz falsch ist.

War es hilfreich?

Lösung

Es gibt viele der möglichen Konvertierungen, die dort stattfinden.Sie sollten die Daten bei jedem Schritt überprüfen:

  • Überprüfen Sie, ob Sie es korrekt aus der Datenbank abrufen
  • Sehen Sie, wie das transformierte XML aussieht
  • Beobachten Sie, was über das Netzwerk geht (einschließlich HTTP-Header)
  • Überprüfen Sie genau, was Sie in ASP erhalten

Drucken Sie die Zeichenfolgen nicht einfach aus als Zeichenfolgen – Protokollieren Sie den Unicode-Wert jedes Zeichens, indem Sie ihn in umwandeln int:

for (int i = 0; i < text.length(); i++)
{
    char c = text.charAt(i);
    log("Character " + c + " - " + (int) c);
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top