如何将非标准字符转义为Windows 1252字符集

问题描述 投票:0回答:1

我有xml文件,有非标准字符,我想将这些转换为Windows 1252编码,因为我不明白XSLT,但我试过这个任何帮助,请在这里是XML和XSLT

<?xml version="1.0"?>
<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="xml" omit-xml-declaration="yes" indent="yes" encoding="Windows-1252"/>

  <xsl:template match="/Recordset">
    <Recordset><xsl:apply-templates /></Recordset>
  </xsl:template>

  <xsl:template match="*|@*">
    <xsl:copy>
      <xsl:apply-templates select="@*" />
      <xsl:apply-templates />
    </xsl:copy>
  </xsl:template>
</xsl:transform>

字符的XML示例

<?xml version="1.0"?>
<Recordset> 
128 € euro sign
129    NOT USED
130 ‚ single low-9 quotation mark
131 ƒ Latin small letter f with hook
132 „ double low-9 quotation mark
133 … horizontal ellipsis
134 † dagger
135 ‡ double dagger
136 ˆ modifier letter circumflex accent
137 ‰ per mille sign
138 Š Latin capital letter S with caron
139 ‹ single left-pointing angle quotation mark
140 ΠLatin capital ligature OE
141    NOT USED
142 Ž Latin capital letter Z with caron
143    NOT USED
144    NOT USED
145 ‘ left single quotation mark
146 ’ right single quotation mark
147 “ left double quotation mark
148 ” right double quotation mark
149 • bullet
150 – en dash
151 — em dash
152 ˜ small tilde
153 ™ trade mark sign
154 š Latin small letter s with caron
155 › single right-pointing angle quotation mark
156 œ Latin small ligature oe
157    NOT USED
158 ž Latin small letter z with caron
159 Ÿ Latin capital letter Y with diaeresis
160 no-break space 
</Recordset>
xml xslt character-encoding
1个回答
0
投票

您询问的字符可以在您要询问的文档字符编码中表示。因此,您不需要使用数字字符实体引用。

XSLT似乎有点过分来改变文档字符编码。您需要读取原始XML文件并使用不同的文档字符编码再次将其写出。这将导致无法在您选择的字符编码中表示的Unicode代码点被序列化为数字字符实体引用。不需要涉及XSLT,您将不得不为XSLT做所有这些。因此,您可以跳过XSLT步骤。

尽管如此,如果您确实有一个读取XML文件的工具,应用转换并再次将其写出来,尊重xsl:output编码属性,那么您可以使用具有适当输出元素的Identity Transform:

<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="XML" encoding="Windows-1252" />
    <xsl:template match="@*|node()">
        <xsl:copy>
            <xsl:apply-templates select="@*|node()"/>
        </xsl:copy>
    </xsl:template>
</xsl:stylesheet>

如果您在示例文档中执行此操作,您将看到“128€欧元符号”确实在Windows-1252中编码。

31 32 38 20 80 20 65 75 72 6F 20 73 69 67 

如果您希望将€表示为数字字符实体引用,请使用不支持它的字符集的文档字符编码进行编码,例如IBM437。

但是,目前还不清楚为什么要使用UTF-8以外的文档字符编码。如果XML处理器不支持XML(Unicode)的字符集,则它不能走得太远。

© www.soinside.com 2019 - 2024. All rights reserved.