Я пытаюсь отобразить символ фунта из XML (currencySymbol = "£").
Я использую XSLT 2 с кодировкой в файле <xsl:output encoding = "ISO-8859-15"/>, и вместо этого он показывает мне �.
Я пробовал разные подходы, используя UTF-8, объявляя ENTITY внутри DOCTYPE, но все равно не повезло. Я открыт для предложений.
Извини, Джеймс. Я думал о евро, когда писал описание. Я пытаюсь отобразить символ фунта (£).
Итак, какой инструмент вы используете, чтобы посмотреть на результат трансформации?
Мы разработали что-то (на Java) в нашем приложении (в компании), которое позволяет нам видеть HTML. Он принимает файл XSL в файл XML, а затем преобразует его в HTML.
Это довольно расплывчатое описание. Используете ли вы XSLT для создания файла HTML, а затем загружаете его в компонент Java Swing или AWT для рендеринга HTML? Или вы загружаете HTML-файл в браузере, таком как Chrome, Edge или Firefox?
Извините за расплывчатое описание. Загружаем HTML-файл в браузер. Я использовал Chrome.
Рассмотрите возможность показать нам минимальные, но полные образцы кода ввода XML, кода XSLT, HTML, который XSLT создает вместе с кодом Java, который использует Saxon для создания HTML, тогда я уверен, что мы сможем определить, что идет не так. Но без каких-либо минимальных, но полных деталей, которые позволили бы нам воспроизвести проблему, невозможно сказать, что вам нужно изменить в вашем XSLT или Java-коде, или и в том, и в другом.
В общем, если вы используете Saxon для создания вывода HTML и хотите убедиться, что директива xsl:output encoding используется для создания метаданных или кодировки HTML, указывающих кодировку в сгенерированном HTML, то Saxon должен отвечать за создание файла результатов и метод вывода должен быть html для HTML 4 или 5 или xhtml для XHTML.






Когда я запускаю запрос
net.sf.saxon.Query -qs:"<a>£</a>" -o:/Users/mike/Desktop/temp/pound.xml !encoding=iso-8859-15
Я получаю файл с шестнадцатеричным содержимым
0000: 3C 3F 78 6D 6C 20 76 65 72 73 69 6F 6E 3D 22 31 <?xml version = "1
0010: 2E 30 22 20 65 6E 63 6F 64 69 6E 67 3D 22 69 73 .0" encoding = "is
0020: 6F 2D 38 38 35 39 2D 31 35 22 3F 3E 3C 61 3E A3 o-8859-15"?><a>£
0030: 3C 2F 61 3E </a>
То есть знак «£» правильно закодирован как xA3.
Если я теперь изменю его на HTML с параметрами запроса
-qs:"<html><head/><body><a>£</a></body></html>" -o:/Users/mike/Desktop/temp/pound.xml !encoding=iso-8859-15 !method=html
Шестнадцатеричный вывод
0000: 3C 68 74 6D 6C 3E 0A 20 20 20 3C 68 65 61 64 3E <html>¿ <head>
0010: 0A 20 20 20 20 20 20 3C 6D 65 74 61 20 68 74 74 ¿ <meta htt
0020: 70 2D 65 71 75 69 76 3D 22 43 6F 6E 74 65 6E 74 p-equiv = "Content
0030: 2D 54 79 70 65 22 20 63 6F 6E 74 65 6E 74 3D 22 -Type" content = "
0040: 74 65 78 74 2F 68 74 6D 6C 3B 20 63 68 61 72 73 text/html; chars
0050: 65 74 3D 69 73 6F 2D 38 38 35 39 2D 31 35 22 3E et=iso-8859-15">
0060: 0A 20 20 20 3C 2F 68 65 61 64 3E 0A 20 20 20 3C ¿ </head>¿ <
0070: 62 6F 64 79 3E 3C 61 3E A3 3C 2F 61 3E 3C 2F 62 body><a>£</a></b
0080: 6F 64 79 3E 0A 3C 2F 68 74 6D 6C 3E ody>¿</html>
что снова правильно.
Поэтому я думаю, что если этот HTML-код отображается некорректно, проблема не на стороне XSLT, а, скорее, на стороне отображения. Итак, вопрос в том, как вы просматриваете файл?
iso-8859-15 - довольно необычный выбор кодировки, и в наши дни utf-8 был бы гораздо более нормальным. Если ни один из них не отображается правильно, я думаю, нам нужно знать:
(а) какое программное обеспечение вы используете для отображения файла
(б) если это браузер, то (i) какой браузер (ii) какой медиа-тип (тип содержимого) в HTTP-заголовке используется при получении файла с сервера?
Символ фунта (£) и евро (€) - я считаю - разные вещи. Какой из них вы пытаетесь отобразить?