Webdings到Unicode

时间:2015-09-28 09:11:14

标签: xslt unicode fonts

我必须通过XSLT转换XML文件,其中包含不同字体类型的字符,例如Symbol,Wingdings,Webdings等。

输入如下:

<p><schar font="Webdings" nr="0081">&#129;</schar></p>

为了处理它,我写了一个函数如下:

<xsl:function name="resolveWebdingsFont" as="xs:string">
    <xsl:param name="hexcode" as="xs:string"/>
    <xsl:param name="fallback" as="xs:string"/>
    <xsl:variable name="hexkey" select="upper-case(replace($hexcode, '^0*(.+)', '$1'))" as="xs:string"/>
    <xsl:variable name="newchar" select="$webdings-character-map[@hex = $hexkey]/@to" as="xs:string?"/>
    <xsl:value-of select="if ($newchar) then $newchar else $fallback"/>
</xsl:function>

我把字符映射放在一个变量中:

<xsl:variable name="webdings-character-map" as="element(char)+">
    ....
    <char hex="81" to="&#x1F6BA;"/>
    <!-- Womens symbol -->
    ...
</xsl:variable>

我这样称呼函数:

<xsl:template match="schar">
    <span data-type="schar">
        <xsl:choose>
            <xsl:when test="@font = 'Symbol'">
                <xsl:value-of select="dy:resolveSymbolFont(@nr, .)"/>
            </xsl:when>
            <xsl:when test="@font = 'Webdings'">
                <xsl:value-of select="dy:resolveWebdingsFont(@nr, .)"/>
            </xsl:when>
            ...
         </xsl:choose>
    </span>
</xsl:template>

所需的输出为<span>,其中unicode表示为其值,这适用于Symbol等字体类型。

要正确映射所有Webdings字符,我需要一个包含所有Webdings字符及其unicode表示的完整列表。

使用unicode 7.0版(2014年6月),它们已经集成。但规范说:

  

众所周知的“Zapf Dingbats”集合全面编码   标志挡,U + 2700 ..U + 27BF。其他的装饰品,如   Wingdings和Webdings集合以各种符号块编码,但是   大多数都出现在杂项符号和象形文字中   块,U + 1F300..U + 1F5FF。“

据我了解,我们必须查看每个块以获得所有字符及其等价物的完整列表;但这是我想避免的。即使我找到一个看起来类似于某个Webdings符号的符号,我也无法确定它是否正式用于表示它。其他人甚至看起来并不相似,但有意代表他们。

我找不到任何官方文件。 是否存在从Webdings到unicode的官方映射?

或者是否有一种完全不同/更好的方法将特殊字符转换为XSLT中的unicode?

1 个答案:

答案 0 :(得分:0)

  

要正确映射所有Webdings字符,我需要一个   所有Webdings字符及其unicode的完整列表   表示。

AFAIK,您只需要将61440添加到十进制代码值即可。在您的示例中,&#129;将变为&#61569;。这适用于Webdings和Windings / Windings2 / Windings3字体 - 我不确定其他人。