Personaggi multibyte corrotti a ????Quando leggi dal database e pubblicato a Pagina ASP utilizzando httpurlconnection

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

Domanda

Nel mio codice Java, sto recuperando alcuni dati multibyte dal database e recuperando un po 'di DOM XML, con quei dati come valore di qualche nodo, convertendo il DOM alla stringa e pubblicando bytest in Pagina ASP tramite HttpurlConnection, ma in qualche modo al ricevitore Terminare i dati è apparire come ???? Invece di alcuni valori multibyte. Si prega di suggerire cosa fare.

cose che sto già facendo ..

1) Ho impostato -Dfile.encoding =UTF8 come proprietà di sistema 2) Durante l'utilizzo di TransformerFactory per convertire il mio DOM XML in stringa, ho impostato

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

per assicurarsi che la codifica sia corretta lì. Si prega di suggerire dove mi sbaglio.

@jon Skeet Altre cose da aggiungere qui ... 1) Sto ricevendo i dati dal database correttamente 2) Trasformato XML sembra anche essere corretto, come ho controllato salvandolo al mio file system locale.
Per la pubblicazione prima stavo usando qualcosa come

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

e i dati risultanti all'estremità del ricevitore si sono convertiti in ????? Ma poi sono passato a
'

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

Quindi i dati all'estremità del ricevitore sembrano essere corretti ... ma il problema si verifica con il modo in cui viene gestito al ricevitore termina in questo caso. Nel mio ricevitore codice ASP sto usando objStream.WriteLine (oXMLDom.xml) ... E qui fallisce e inizia a dare un errore interno del server ... Si prega di suggerire cosa c'è di sbagliato con il secondo approccio.

È stato utile?

Soluzione

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);
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top