使用XSL显示'£'和'€'符号

时间:2009-03-04 18:33:58

标签: xslt

我正在读取数据源,然后对出来的文本应用xsl变换,并且正在删除所有£和€符号。

我错过了一些明显的东西吗?我已经尝试将编码更改为iso-8859-1,但无济于事。

<?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>

5 个答案:

答案 0 :(得分:6)

最简单的方法是使用Numeric Character references

&#163;的{​​p> £ &#8364;

答案 1 :(得分:0)

尝试使用&amp; eur;和&amp;#163;输出那些符号。

答案 2 :(得分:0)

  

我错过了一些明显的东西吗?我已经尝试将编码更改为iso-8859-1,但无济于事。

这不会起作用,因为'€'不在iso-8859-1

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

只是预感,但你能做到吗

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

我不知道xsl:output的属性是否已被连接或重写。

您可能会发现这些实体无论如何都会被编码。

答案 3 :(得分:0)

直接使用£和€字符。这就是UTF-8的用途。

确保您正在发送具有适当MIME类型的XML文件。经常使用text/xml overrides encoding in <?xml ?> declaration
如果服务器尚未执行此操作,请将服务器配置为始终使用application/xml

您在HTML编码声明中遇到错误。 <meta>应包含:
text/html; charset= UTF-8

答案 4 :(得分:0)

我遇到了同样的问题(使用欧元符号)。问题是在FONET.DLL中硬编码。在课程TrueTypeFont中,方法MapCharacter写为:

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

因此任何值大于255的字符都将被“忽略”。我下载了源代码(来自https://fonet.codeplex.com/)并将方法修改为:

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

在这个新方法中使用这个库,欧元符号神奇地变得可见!