Саксонская проблема с норвежскими иероглифами

Использование Saxon для обработки XML-файла: http://meltwaternews.com/magenta/xml/html/18/2/rss/v2_406837.rss2.XML, который включает некоторые норвежские символы, такие как Æ, Ø, Å. кодировка xml utf-8

Однако возникает ошибка: недопустимый символ html: десятичное число 152. (http://meltwater.vacau.com/s2.png)

Но десятичное число 152, которое равно ~, не может быть найдено в исходном XML-файле.

и если я использую windows-1252 для обработки этого XML-файла с помощью Saxon, я действительно вижу, что Æ, Ø, Å анализируются с ошибкой как Ø Ã¥ (здесь вы можете увидеть десятичное число 152) (http://meltwater.vacau .com/s1.png).

Может кто подскажет как сделать правильно?


person jackbu    schedule 10.01.2013    source источник
comment
Идентифицирует ли ошибка смещение в файле, где, по ее мнению, находится неверный символ? Ваша ссылка на meltwater.vacau.com/s2.png не работает.   -  person Jim Garrison    schedule 10.01.2013
comment
Ваши ссылки на meltwater.vacau.com*.png не работают. Кроме того, десятичное число 152 — это не ~ (десятичное число 0x7F или 127), а тильда верхнего индекса ˜ в windows-1252.   -  person Jim Garrison    schedule 10.01.2013
comment
Я без проблем прогнал ваш XML через таблицу стилей шаблона идентификации в Saxon 6.5.5 и Saxon 9.4.0.3. Возможно ли, что плохой символ находится в таблице стилей, а не во входных данных XML?   -  person Jim Garrison    schedule 10.01.2013
comment
попробуйте jackbu.x59.cn/img/s1.png и jackbu.x59.cn/img/s2.png. И извините, я опечатался ~. Да это. Если вы используете саксонский язык для разбора Æ, это будет Ø.   -  person jackbu    schedule 10.01.2013
comment
Я очень подозрительно отношусь к RSS-каналам — ошибки кодирования очень распространены. Кроме того, содержимое цитируемого URL-адреса постоянно меняется — тот факт, что вчера был неправильно закодированный символ, не означает, что он все еще присутствует сегодня.   -  person Michael Kay    schedule 10.01.2013


Ответы (2)


Используйте карту символов.

<xsl:character-map name="meltwater_fix">
  <xsl:output-character character="&#152;" string="˜"/>
</xsl:character-map>

а затем добавьте к выходному элементу:

<xsl:output> or <xsl:result-document>

следующий атрибут:

use-character-maps="meltwater_fix"
person taggore    schedule 13.11.2013

У меня были те же проблемы с норвежским символом «Ø». Проблема не специфична для сакса, проблема существует и в apache xalan. Illegal HTML character: decimal 152

Мне удалось заставить его работать, убедившись, что документы XML и XSL были правильно закодированы (некоторые текстовые редакторы могут отображать правильный текст, но по-прежнему сохраняют документ в кодировке UTF-8 или какой-либо другой). Я сохранил все свои тестовые документы с помощью vim :write ++enc=ISO-8859-1, чтобы убедиться, что документы были сохранены с правильной кодировкой.

Мне также пришлось указать выходную кодировку XSL-Transformer:

String encoding = "ISO-8859-1";
Transformer transformer = transformerFactory.getTransformer(xsltDocumentSource);
transformer.setOutputProperty(OutputKeys.ENCODING, encoding);
person Binsh    schedule 02.02.2016