Xslt 从Webdings到Unicode
我必须通过XSLT转换XML文件,该文件包含不同字体类型的字符,如符号、Wingdings、Webdings等 输入如下所示:Xslt 从Webdings到Unicode,xslt,unicode,fonts,Xslt,Unicode,Fonts,我必须通过XSLT转换XML文件,该文件包含不同字体类型的字符,如符号、Wingdings、Webdings等 输入如下所示: <p><schar font="Webdings" nr="0081"></schar></p> <xsl:template match="schar"> <span data-type="schar"> <xsl:choose>
<p><schar font="Webdings" nr="0081"></schar></p>
<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>
和#129
为了处理它,我编写了如下函数:
<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="🚺"/>
<!-- Womens symbol -->
...
</xsl:variable>
....
...
我这样调用函数:
<p><schar font="Webdings" nr="0081"></schar></p>
<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>
...
所需的输出是一个
,其值为unicode表示,这对于符号等字体类型很有效
为了正确映射所有Webdings字符,我需要一个完整的Webdings字符列表及其unicode表示形式
在unicode 7.0版(2014年6月)中,它们已被集成。但说明书上说:
著名的“Zapf Dingbats”集合在
丁巴特斯街区,U+2700..U+27BF。其他种类的小蝙蝠,如
Wingdings和Webdings集合编码在各种符号块中,但
大多数是在杂项符号和象形文字中发现的
块,U+1F300..U+1F5FF。“
据我所知,要想得到所有字符及其等价物的完整列表,人们必须查看每个块;但这是我想要避免的。即使我会找到一个看起来类似于某个Webdings符号的符号,我也不能确定它是否是正式代表它的符号。其他人甚至不看similar,但其目的是代表他们
我找不到任何官方文件。
是否存在从Webdings到unicode的正式映射
或者在XSLT中是否有一种完全不同/更好的方法将特殊字符转换为unicode
为了正确地映射所有Webdings字符,我需要一个
所有Webdings字符及其unicode的完整列表
代表性
好的,您只需要在十进制代码值中添加61440。在您的示例中,
;
将变成;
。这适用于Webdings和Windings/Windings 2/Windings 3字体-我不确定其他字体。看看。只需查看unicode网站。->“dingbats”“->出发吧。现在,在点击“发布”按钮之前,您确实应该在帖子中输入一些信息。点击编辑链接,把这些信息放在你的问题中,然后删除评论(然后我也可以删除我的评论,因为在你编辑之后这三个评论都应该是完全不必要的),那么你的问题是什么?在我看来,这仍然像是你在寻找一本书、工具、软件库、教程或其他非网站资源。我认为这不起作用。女性符号的十进制值为128698
61569
是私人使用区域的值。@bauz I在这方面可能已过期。你试过把两者的区别加起来吗,即128698-129?是的,我试过了。不幸的是,似乎没有如此简单和明确的顺序。但这似乎是合乎逻辑的,因为一些Webdings符号已被集成,而其他符号已与现有的unicode字符合并。@bauz如果没有通用算法来转换数字代码,则必须使用查找表。但是你的问题可能会偏离主题。好吧,如果没有找到通用的解决方案,我会接受这个问题。