Юникод символы в XSLT - PullRequest
       61

Юникод символы в XSLT

0 голосов
/ 09 октября 2018

У меня проблема с отображением символов в кодировке Unicode.Например, в XML у меня есть текст, который я передаю в HTML с помощью XSLT.

Текст, например, "Najlepší", и символы "š" и "í" в этой форме отображаются в том виде, в каком они должны быть.Но я попытался преобразовать их в Unicode (предположительно) на этом веб-сайте http://itpro.cz/juniconv/, поэтому текст теперь выглядит как Najlep\u0161\u00ED с символами "š" и "í" в форме \u0161 и \u00ED.

Я ожидал, что преобразованные символы будут отображаться нормально, я попробовал UTF-8, UTF-16, ISO-8859-1, пока что не повезло.

Мои XML и XSLT довольно просты.В приведенном здесь XML-коде я пробовал различные кодировки и комбинации символов

<?xml version="1.0" encoding="UTF-8"?>
<test>

<element1>
<name>ľ š č ť ž ý á í é &#9730; u"\U+010C" \u00C1 u"\U0001D504" \u0161 \u010D \u0165 \u0165 \u017E \u00FD \u00E1 \u00ED \u00E9</name>

</element1>


</test>

и XSLT

<?xml version="1.0" encoding="UTF-8"?>
<html xsl:version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <head>
        <meta charset="UTF-8"/>
    </head>
    <body>
    <xsl:for-each select="test/element1">
        <xsl:value-of select="name"/>
    </xsl:for-each>
    </body>
</html>

и вывод выглядит следующим образом

enter image description here

Что я делаю не так?например, редактор пакетов ресурсов плагина Eclipses может правильно отображать эти символы.

РЕДАКТИРОВАТЬ: я не осознавал, что это может вызвать путаницу - мне нужно, когда HTML создается путем преобразования и открывается в сетибраузер должен отображать \u00C1 как Á

Ответы [ 2 ]

0 голосов
/ 09 октября 2018

Java и Javascript имеют соглашение для представления символов Unicode как \Uhhhh.

XML имеет похожее, но другое соглашение, он использует &#xhhhh;.

Вы используете Java /Нотация Javascript в XML, и это не сработает.

(Обратите внимание, что есть тонкое различие между двумя нотациями, когда речь идет о символах выше xFFFF: соглашение Java / Javascript разбивает символ на суррогатпара и представляет каждую половину отдельно, тогда как XML представляет кодовую точку Unicode как ссылку на один символ. Следовательно, нотация XML имеет переменную длину с точкой с запятой в качестве терминатора, тогда как нотация Java / Javascript всегда состоит из 4 шестнадцатеричных цифр.)

0 голосов
/ 09 октября 2018

Обратите внимание, как правильно обрабатывается &#9730; ...;)

Фактически, ваши различные нотации, такие как \U+010C, \u00C1 и т. Д., Представляют собой нотации, специфичные для языка программирования, которые "случаются сбыть преобразованы в соответствующие кодовые точки Unicode.

Как указано в W3C для Unicode в XML и других языках разметки 1.1,

Символы обозначаются с использованием используемых обозначенийв стандарте Unicode, то есть необязательный U +, за которым следует шестнадцатеричное число с использованием не менее 4 цифр, таких как «U + 1234» или «U + 10FFFD». В XML или HTML это может быть выражено как "&#x1234;" или "&#x10FFFD;".

...