Domanda

Ho un database di Access ASP che contiene le stringhe in varie lingue europee. Il database è stato popolato prima dagli agenti nei rispettivi paesi. Esso contiene le voci con caratteri accentati ecc come ci si aspetterebbe. Se apro il database con MS Access questi personaggi appaiono bene. Per esempio il l'equivalente tedesco di spettacoli "Open" come "Öffnen" (si spera si può vedere una "O" con 2 punti sopra di esso!).

Ho codice ASP che legge i record del database e restituisce in XML. Il testo è passato a XMLEncode per costruire il codice XML, ma che sembra a che fare solo con i 5 speciali come "<", "&", ecc Se ho discarica l'XML i caratteri accentati sono invariati.

<English>Open</English>
<German>Öffnen</German> 

Se guardo i pacchetti prime con Wireshark vedo che il byte "O" è hex D6, che sembra sia di decimali Unicode e ISO 8859-1 valore.

Il problema inizia quando si tenta di analizzare il codice XML nel lato client JS. Ottengo:

"An invalid character was found in text content"

da IE. FF e Chrome felicemente accettare l'XML senza singhiozzo ma gli spettacoli del browser il carattere "O" come un diamante con un punto interrogativo all'interno.

http://www.validome.org/xml/validate/ rapporti " codificante errore ".

http://www.w3schools.com/dom/dom_validate.asp pensa va bene.

L'XML è codifica UTF-8.

Che cosa devo fare per avere IE accettare la mia XML senza lamentarsi?

Che cosa devo fare per avere i browser visualizzano correttamente la roba?

È stato utile?

Soluzione

Come fai a sapere l'XML è codificato UTF-8? Non conosco l'ambiente MS bene, ma in Java un problema comune è quello di pensare che solo la scrittura l'intestazione encoding="UTF-8" fa sì che sia codifica UTF-8. È inoltre necessario configurare lo scrittore a UTF-8 in realtà scrittura.

Hai detto spettacoli Wireshark hex D6, che indicherebbe il torrente è in realtà NON codifica UTF-8, indipendentemente da ciò che dice l'intestazione.

Altri suggerimenti

Beh, io non sono del tutto sicuro perché, ma sono stato in grado di farlo funzionare. Spinto dai commenti di Jim ho cambiato il codice XML e la risposta di codifica di nuovo 8859-1 a UTF-8, e anche la codifica nel tag META per le pagine.

Ora funziona senza lamentarsi in IE, e il browser ora visualizzare i caratteri corretti.

Ho anche controllato i byte grezzi con Wireshark questo momento e il carattere "O" viene codificato in XML come 2 byte (0xC3, 0x96), invece di 1 byte di 0xD6.

Quindi, in sintesi:

Nel codice ASP sul lato server per generare l'intestazione di risposta XML:

return ("<?xml version=\"1.0\" encoding=\"UTF-8\"?>") ;

Nel codice ASP sul lato server per generare la risposta stessa:

Response.ContentType = "text/xml; charset=UTF-8" ;
Response.Write (XMLResponse) ;

e nell'intestazione della pagina web:

<head>
  <meta http-equiv="Content-type" content="text/html; charset=UTF-8"> 

Grazie Jim.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top