Как экранировать нестандартные символы в набор символов Windows 1252 - PullRequest
0 голосов
/ 09 апреля 2019

У меня есть xml-файл, который содержит нестандартные символы, и я хотел бы преобразовать их в кодировку Windows 1252 следующим образом & # nnn. Я не очень хорошо понимаю 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>

1 Ответ

0 голосов
/ 11 апреля 2019

Символы, о которых вы спрашиваете, представляются в кодировке символов документа, о которой вы спрашиваете.Таким образом, вам не нужно использовать числовые ссылки на сущности символов.

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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...