Question

J'ai une base de données ASP Access qui contient des chaînes dans différentes langues européennes. La base de données a été peuplée avant par des agents dans les pays respectifs. Il contient des entrées avec des caractères accentués de etc que vous attendez. Si j'ouvre la base de données avec MS Access ces caractères apparaissent bien. Par exemple, le l'équivalent allemand de « Open » montre que « Öffnen » (vous pouvez nous l'espérons voir un « O » avec 2 points au-dessus!).

J'ai le code ASP qui lit la base de données et renvoie les enregistrements en XML. Le texte est passé à xmlEncode pour construire le XML, mais qui semble ne traiter les 5 plats comme « < », « et », etc. Si je vider le XML les caractères accentués ne changent pas.

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

Si je regarde les paquets bruts avec Wireshark je vois que le « Ö » octet est hexadécimal D6, qui semble l'être de décimales Unicode et la valeur ISO 8859-1.

Le problème commence lorsque je tente d'analyser le XML côté client JS. Je reçois:

"An invalid character was found in text content"

à partir de l'IE. FF et Chrome acceptent heureusement le XML sans hoquet, mais les spectacles de navigateur le caractère « Ö », comme un diamant avec un point d'interrogation.

http://www.validome.org/xml/validate/ rapports " erreur Encoding « .

http://www.w3schools.com/dom/dom_validate.asp pense qu'il est très bien.

Le fichier XML est UTF-8 codé.

Que dois-je faire pour avoir IE accepter mon XML sans se plaindre?

Que dois-je faire pour avoir des navigateurs affichent les choses correctement?

Était-ce utile?

La solution

Comment savez-vous le XML est UTF-8 codé? Je ne sais pas l'environnement MS bien, mais en Java un problème commun est de supposer que simplement écrire l'en-tête de encoding="UTF-8" amène à être UTF-8 codé. Vous devez également configurer l'écrivain en UTF-8 en fait écrire.

Vous avez dit hex SHOWS Wireshark D6, qui indique le flux est en fait pas UTF-8 codé, peu importe ce que l'en-tête dit.

Autres conseils

Eh bien, je ne suis pas tout à fait sûr pourquoi, mais j'ai pu le faire fonctionner. Poussé par les commentaires de Jim j'ai changé l'encodage XML et la réponse de retour 8859-1 en UTF-8, ainsi que l'encodage dans la balise META pour les pages.

Il fonctionne maintenant sans se plaindre dans IE et les navigateurs affichent désormais les caractères corrects.

I a également vérifié les octets bruts avec Wireshark ce temps et le caractère « O » est en cours de codage dans le fichier XML en tant que 2 octets (0xC3, 0x96), au lieu de 1 octet de 0xD6.

Donc en résumé:

Dans le code côté serveur ASP pour générer l'en-tête de réponse XML:

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

Dans le côté serveur code ASP pour générer la réponse lui-même:

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

et dans l'en-tête de la page web:

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

Merci Jim.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top