XSL кодировка страницы - PullRequest
1 голос
/ 01 марта 2012

Я использую xslt 1.0 для преобразования некоторых XML, возвращаемых через Server.Execute на странице .aspx. В Google Chrome, если я использую следующую кодировку XSLT:

<xsl:output method="html" version="4.0" omit-xml-declaration="yes" encoding="utf-8" indent="yes" />

В верхней части моего преобразованного XML осталось свободное место. Если я использую эту кодировку:

<xsl:output method="html" version="4.0" omit-xml-declaration="yes" encoding="iso-8859-1" indent="yes" />

Пространство прошло, но такие вещи, как £, отображаются как . Никогда не понимал, какую кодировку мне следует использовать. Кто-нибудь может указать мне правильное направление, пожалуйста? Спасибо.

1 Ответ

1 голос
/ 22 марта 2012

Мне кажется, проблема в том, что когда вы используете кодировку utf-8, выходной файл начинается с префикса, обозначающего кодировку - последовательность из двух символов 0xEF и 0xBB, и этот префикс - это дополнительный пробел видя.

Вы можете проверить, так ли это, сохранив файл и проверив, есть ли префикс, и посмотреть, исчезнет ли проблема вручную, удалив префикс.

При использовании iso-8859-1 (или другой не-Unicode-кодировки) префикс отсутствует и, следовательно, нет проблем, но использование кодировок не-Unicode обычно является плохой идеей, поскольку создает проблемы при обработке символов не-ASCII.

Чтобы иметь выход UTF-8 без префикса, используйте XmlWriter следующим образом:

  XmlWriterSettings settings = new XmlWriterSettings();
  settings.Encoding = new UTF8Encoding(false);
  using (XmlWriter writer = XmlWriter.Create(response.OutputStream, settings)) {
     // . . . apply the XSLT sending its output to 'writer' . . .
  }

, где response - это HttpResponse обслуживаемого HTTP-запроса.

...