кросс-кодирование XSL-преобразований - PullRequest
0 голосов
/ 27 июня 2011

У меня есть некоторые операции над файлами XML (ничего важного), и XSL в этом случае очень хорошо применяется.Однако мой входной файл закодирован в UTF-8, а файл после преобразования ДОЛЖЕН быть закодирован в iso-8859-1.(Я также не контролирую кодировку входного файла)

Все идет хорошо, за исключением того, что некоторые выходные символы, присутствующие в utf-8, а не в iso-8859, экранируются в выходном файле.

Например, у меня <text>some text with a € character</text> преобразовано в <text>some text with a &#8364; character</text>

"€" в выходном файле является проблемой для меня.

Поскольку мы должны что-то сделать с этими специальными символамикоторых нет в ISO, я сначала подумал о том, чтобы преобразовать их вручную с помощью функции замены: replace (., '€', 'евро'). Но в utf-8 есть так много символов, которых нет в iso, что это быстро скучно... и медленно!

У вас есть лучшее решение?(при условии, что мы можем просто удалить эти символы или преобразовать их в любой жизнеспособный символ iso)

Заранее спасибо

1 Ответ

1 голос
/ 27 июня 2011

Есть ли у вас

<xsl:output encoding="iso-8859-1" />

на месте?

Потому что это должно быть все, что тебе нужно, правда.Если ваш XSL-процессор сам по себе неправильно переводит символы в целевую кодировку, он не работает, и вам нужно использовать другую.

Подсказки

  • Часто Windows-1252что люди действительно имеют в виду, когда говорят ISO-8859-1.Проверьте внимательно, относится ли это и к вам.Между этими двумя есть тонкие различия (особенно в отношении знака евро, который не существует в ISO-8859-1, но существует в Windows-1252 и ISO-8859-15) .
  • Всякий раз, когда в XML-файле отсутствует объявление XML <?xml version="1.0" encoding="iso-8859-1"?>, предполагается кодировка UTF-8.Обязательно поместите объявление поверх вашего файла, когда не UTF-8 закодировано.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...