Multibyte-Zeichen beschädigt zu ????wenn aus der Datenbank gelesen und über HTTPURLConnection auf der ASP-Seite gepostet wird
-
15-11-2019 - |
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.
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);
}