2009-03-04 9 views
1

Je lis une source de données, puis j'applique une transformation xsl au texte qui sort et tous les symboles £ et € sont supprimés.affichant le symbole '£' et '€' en utilisant XSL

Est-ce que quelque chose me manque? J'ai essayé de changer l'encodage en iso-8859-1 en vain.

<?xml version="1.0" encoding="utf-8"?> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" > 
    <xsl:output encoding="utf-8"/> 
    <xsl:output method="html" omit-xml-declaration="yes"/> 
    <xsl:param name="Subject"/> 
    <xsl:param name="DateString"/> 
    <xsl:param name="CurrentSiteUrl"/> 

    <xsl:template match="/"> 
     <html> 
      <xsl:apply-templates/> 
    </html> 
    </xsl:template> 
    <xsl:template match="posts> 
     <xsl:variable name="postcount" select="count(content)"/> 
     <html> 
      <head> 
      <meta http-equiv="Content-Type" content="text/html;utf-8" /> 
      </head> 
+0

Une bonne partie du script XSLT est apparemment manquante ... – bortzmeyer

+0

Pouvez-vous fournir des exemples réels? Je ne vois vraiment pas pourquoi un processeur XSLT traiterait ces signes différemment de tout autre caractère Unicode. – bortzmeyer

+0

Vérifiez également que le document * origin * est bien formé (ce qui inclut son codage correct). – bortzmeyer

Répondre

0

essayez d'utiliser & eur; et & # 163; pour sortir ces symboles.

+0

&eur; fonctionne uniquement en HTML, pas en XML (du moins pas sans DTD). – Richard

0

Est-ce que quelque chose me manque? J'ai essayé de changer l'encodage en iso-8859-1 en vain.

Cela ne fonctionnera pas comme '€' est pas en iso-8859-1

<xsl:output encoding="utf-8"/> 
<xsl:output method="html" omit-xml-declaration="yes"/> 

juste une intuition mais pourriez-vous faire

<xsl:output method="html" omit-xml-declaration="yes" encoding="utf-8"/> 

Je ne sais pas si les attributs de xsl: output sont concaténés ou remplacés.

Vous trouverez probablement que les entités sortent codées de toute façon.

+0

iirc, le caractère euro existe dans iso-8859-15 cependant, le remplacement moderne pour iso-8859-1. – Powerlord

+0

Oui - ISO-8859-15 est le jeu de caractères pour l'euro, mais l'euro n'est pas le seul changement (vérifiez donc que vous n'avez besoin d'aucun des caractères modifiés). Wikipedia a un résumé des différences à: http://en.wikipedia.org/wiki/ISO/IEC_8859-15 –

0

Utilisez directement les caractères £ et €. C'est ce que UTF-8 est pour. Assurez-vous simplement que vous envoyez des fichiers XML avec le bon type MIME. Souvent utilisé text/xml overrides encoding in <?xml ?> declaration!
Configurez le serveur pour toujours utiliser application/xml s'il ne le fait pas encore.

Vous avez une erreur dans la déclaration d'encodage HTML. <meta> doit contenir:
text/html;charset=UTF-8.

0

J'ai rencontré le même problème (avec l'euro-symbole). Le problème est codé en dur dans le FONET.DLL. Dans la méthode de classe TrueTypeFontMapCharacter est écrit:

public override ushort MapCharacter(char c) 
{ 
    if (c > Byte.MaxValue) 
     return (ushort) FirstChar; 
    return mapping.MapCharacter(c); 
} 

donc un caractère d'une valeur supérieure à 255 sera « ignoré ». J'ai téléchargé les sources (de https://fonet.codeplex.com/) et modifié la méthode:

public override ushort MapCharacter(char c) 
{ 
    return mapping.MapCharacter(c); 
} 

En utilisant cette bibliothèque avec cette nouvelle méthode, l'euro-symbole est devenu par magie visible!