Что такое код xslt_set_encoding


Содержание

FPublisher

Web-технологии: База знаний

Документация PHP

xslt_set_encoding

xslt_set_encoding — Set the encoding for the parsing of XML documents

Описание

void xslt_set_encoding ( resource $xh , string $encoding )

Set the output encoding for the XSLT transformations. When using the Sablotron backend, this option is only available when you compile Sablotron with encoding support.

Список параметров

The XSLT processor link identifier, created with xslt_create().

An output encoding, e.g iso-8859-1.

Возвращаемые значения

Эта функция не возвращает значения после выполнения.

Linux.yaroslavl.ru

position() mod 2 = 0 «>
#CCCCCC

С элементом xsl:if и с функцией position() мы уже знакомы. Оператор mod дает нам остаток от деления на 2. А элемент xsl:attribute позволяет нам динамически подставлять в файл результатов различные атрибуты. Это очень мощный элемент, мы разберем еще одно применение этого элемента в следующем параграфе. А сейчас приведем для полноты картины таблицу результатов.

Учебник РНР
Назад Вперёд

xslt_set_encoding — устанавливает кодировку для разбора XML-документов.

Описание

void xslt_set_encoding (resource xh, string encoding)

Устанавливает кодировку вывода для XSLT-трансформаций. При использовании с Sablotron backend эта опция доступна, только если вы компилируете Sablotron с поддержкой кодировки.

XSLT первый шаг

1. Введение

Не прошло и трёх лет с тех пор, как у меня зародилась мысль о том, что пора изучать XSLT -))). Мысль зародилась, а везде ещё стоял PHP 4 и зверствовал Salbotron , который, мягко говоря, не отличался высокой производительностью. Да и редко какой браузер мог похвастаться поддержкой этого самого XSLT. По этим соображениям изучение столь перспективного направления я отложил до лучших времён. На данный момент можно смело заявить, что эти времена настали, поскольку вышел PHP 5 с поддержкой XSLT и сносной объектной моделью, а все топовые браузеры уже сами уверенно держат преобразования, только подавай XML. :)

Важные ссылки по теме, первоисточники:

  • http://w3c.org — комитет по разработке и продвижению стандартов всемирной паутины Internet. На данный момент он является первоисточником практически всех веб-ориентированных стандартов и рекомендаций.
  • http://www.w3.org/TR/xml — спецификация расширяемого языка разметки XML, который является основой современного веба. На момент написания статьи доступна пятая редакция версии 1.0, а также вторая редакция версии 1.1.
  • http://www.w3.org/TR/xml-names — спецификация использования пространств имён в XML.
  • http://www.w3.org/TR/xpath — спецификация по использованию языка поиска частей XML-документа XPath.
  • http://www.w3.org/TR/xsl/ — спецификация расширенного языка стилей XSL.
  • http://www.w3.org/TR/xslt — спецификация языка преобразований XSLT.
  • http://validator.w3.org/ — валидатор HTML.
  • http://www.w3.org/TR/xhtml1/ — спецификация XHTML1.0.

Переводы на русский язык:

Для лучшего понимания всего происходящего я рекомендую читать спецификации в следующем порядке:

  1. XML (это основа!)
  2. пространства имён (механизм разнородного XML-кода в одном файле)
  3. XPath (язык выборки элементов из дерева структуры)
  4. XSLT (преобразования)
  5. XHTML (то, к чему нужно стремиться)

Особо пытливые могут также уделить внимание расширенному языку стилей XSL.

2. Валидный XHTML

Что такое валидный XHTML? В первую очередь, это XML-документ, который должен соответствовать спецификации XML. Во-вторую, почти обычная HTML-страница, к которой все привыкли.

Почему нужен именно XHTML? Исключительно из соображений совместимости и кросс-браузерности. Страница в XHTML будет с большей вероятностью отображаться корректно в популярных браузерах, чем обычный HTML.

Для рядового клепателя страниц словосочетание XML-документ должно означать следующее:

  1. Документ содержит объявление XML-документа в самом начале страницы:
  2. Документ содержит один корневой элемент, в котором находятся все остальные.
  3. Все элементы (тэги) должны иметь закрывающую часть (
    ,

).

  • Атрибуты всегда имеют значение, которое обязательно указывается в кавычках (одинарных или двойных). Например, «radio» disabled= «disabled» /> .
  • Управляющие символы & , и > всегда должны маскироваться. Например, «?a=1&b=2» > & . Исключение составляет только , внутри которого спецсимволы можно не маскировать.
  • Также сам XHTML обязывает выполнять следующие условия:

    1. Документ должен объявлять пространство имён, в рамках которого будут использоваться элементы HTML.
    2. Документ должен объявлять DOCTYPE перед корневым элементом и указывать в нём один из типов XHTML и соответствующий DTD.

    Пример простого документа XHTML1.0:

    И так обо всём по порядку.

    Объявление XML-документа, в котором указывается его версия и кодировка.

    Для большей безопасности кодировку нужно всегда выставлять, иначе могут возникнуть проблемы с невалидными (по отношению к дефолтной кодировке) символами.

    Объявление типа документа и его схемы.

    Для XHTML 1.0 есть три типа — Strict (строгое соответствие рекомендациям W3C), Transitional (переходный тип) и Frameset (использование фреймов). Для каждого из них предусмотрен отдельный DTD.

    Объявление пространства имён и используемого языка.

    Очень важно указывать ссылку именно в таком регистре и никак иначе. Это связано с тем, что в XML имена элементов и содержимое их атрибутов регистрозависимы.

    Три версии XHTML1.0 предназначены для лучшей обратной совместимости:

    • Strict — обеспечивает наибольшее соответствие рекомендациям W3C со стороны браузеров. Однако и сам HTML-код должен следовать этим рекомендациям.
    • Transitional — менее строгое соответствие, которое заставляет браузер вести себя так, как если бы это был обычный HTML-документ.
    • Frameset — позволяет использовать фреймы.

    Помимо XHTML1.0 на данный момент доступен XHTML1.1:

    XHTML1.1 по сути является тем же XHTML1.0 Strict и призван вытеснить другие версии XHTML1.0. Однако, по сравнению с XHTML1.0 Strict, у него есть ряд отличий:

    1. Удалён атрибут lang , его роль выполняет xml:lang . (Модуль [ XHTMLMOD ])
    2. Для элементов a и map вместо атрибута name нужно использовать атрибут id . (Модуль [ XHTMLMOD ])
    3. Доступен набор элементов ruby . (Модуль [ RUBY ])

    Итак, если вам нужна наибольшая кросс-браузерность и совместимость с рекомендациями W3C, то XHTML1.1 самое оно!

    Из этих соображений результатом моих преобразований будет именно XHTML1.1.

    3. XSLT-преобразования

    Что такое XSLT? Это язык преобразований XML-документа, который был разработан как часть расширенного языка стилей (XSL).

    Зачем нужен XSLT? Он позволяет реализовать схему, при которой данные хранятся отдельно, а их представление отдельно. То есть, один XML-документ преобразуется с помощью другого XML-документа (XSL, в котором находятся XSLT-шаблоны) в конечный документ. Результатом может быть XML, HTML или текстовый документ любого формата.

    Для того, чтобы воспользоваться XSLT-преобразованиями, в первую очередь нужно сформировать правильный стиль XSL и подключить его к XML-файлу.

    Валидным XSL-документом является XML-документ, у которого задано пространство имён xsl и присутствует корневой элемент stylesheet. В самом простом случае стиль может выглядеть, например, так:

    Этот стиль не содержит каких-либо явных определений шаблонов или других элементов XSL. Однако, его уже можно использовать. Чтобы посмотреть результат, достаточно сформировать произвольный XML-документ и подключить к нему этот стиль:

    За подключение стиля отвечает строка:

    Если файлы text.xml и test.xsl созданы и находятся в одной папке, то с помощью любого XSLT-парсера можно преобразовать исходный test.xml в результирующий документ. В качестве парсера могут выступать все популярные браузеры (IE5+, FF2+, Opera9+ и другие), а также модули в языках программирования, например, в PHP. Если вы используете браузер, то достаточно открыть test.xml, и он сразу отобразит примерно такой результат:

    При этом кодировка результата будет UTF-8, несмотря на то, что исходный документ был сформирован в windows-1251. К сожалению, браузеры обычно не позволяют просмотреть код результирующего документа, но модуль XSLT в PHP5 даёт возможность передать результирующий код в переменную, которую можно сохранить в файл. Поэтому, используя PHP, я приведу исходный код результирующего документа:

    Этот код не является валидным XML-документом и тем более XHTML1.1. Для того, чтобы сформировать нужный код, я усложню исходный XSL-стиль и добавлю туда необходимые шаблоны и преобразования. При этом исходный XML-документ останется без изменений.

    В качестве примера я приведу XSL-стиль, который при помощи XSLT будет выводить список атрибутов исходного XML-документа с их значениями, при этом будет формироваться валидный XHTML1.1. Итак, стиль:

    Чтобы понять, как он работает, я распишу каждое действие отдельно:

    Документ сформирован в кодировке windows-1251, о чём сообщается в атрибуте encoding. Версию XML-документа желательно всегда указывать, это рекомендация W3C.

    Затем идёт объявление корневого элемента, стиля:

    Обязательным атрибутом является определение пространства имён xsl через атрибут xmlns:xsl= «http://www.w3.org/1999/XSL/Transform» .


    Следующим шагом в корневом элементе stylesheet объявляется, каким образом нужно формировать результирующий документ:

    • method= «xml» — метод вывода документа. Результирующий документ будет в формате XML.
    • encoding= «windows-1251» — кодировка результирующего документа.
    • omit-xml-declaration= «no» — пропускать или нет начальное объявление XML-документа ( ). Может иметь значение «yes» или «no» (актуально только для html).
    • indent= «yes» — формировать отступы согласно уровню вложенности. Может иметь значение «yes» или «no».
    • media-type= «text/xml» — MIME-тип результирующего документа (используется только для метода вывода html).
    • doctype-public= «-//W3C//DTD XHTML 1.1//EN» — тип результируюшего документа (DOCTYPE)
    • doctype-system= «http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd» — ссылка на DTD

    Если метод вывода объявлен html, то значения атрибутов encoding и media-type будут подставлены в заголовок страницы ( . ) посредством метатега.

    Объявление основного шаблона:

    Именно этот XSLT-шаблон соответствует корню исходного дерева и будет вызван первым для преобразования. Атрибут match принимает значения, которые должны соответствовать языку поиска элементов XPath.

    Остальные шаблоны, если таковые имеются, должны подключаться из этого шаблона при помощи средств XSLT.

    Формирование XHTML-страницы. Оно начинается с элемента , у которого указано пространство имён xhtml:

    Атрибут xmlns= «http://www.w3.org/1999/xhtml» указывает на пространство имён xhtml, которое будет применено по умолчанию к этому элементу и всем дочерним элементам, у которых оно не задано явно.

    Атрибут xml:lang= «ru» указывает на язык, в котором сформирована страница (будущая).

    Эта часть стиля была нужна для формирования атрибутики валидного XHTML1.1 кода.

    Теперь что касается XSLT-преобразований:

    Вставка простого текста:

    Текст «Мой список:» будет подставлен в тег

    Организация цикла по выборке:

    Атрибут select принимает выражение XPath, на основе которого делает выборку. Если выборка вернула список узлов, то начинает работать цикл по каждому элементу.

    В данном случае выборка вернёт список атрибутов для этого (корневого) и всех дочерних элементов.

    В данном случае проверяется на чётность позиция элемента в списке выборки. Если тест возвращает true (порядковый номер элемента чётный), то срабатывает содержимое этого элемента.

    Управление атрибутами вышестоящего элемента:

    В данном случае, если позиция элемента чётная (определяется вышестоящим if), то в стиль элемента
    будет прописан серый цвет фона.

    Вывод значений элемента:

    Этот код подставит в вышестоящий элемент строку, собранную из имени текущего элемента и его значения. Содержимое атрибута select соответствует XPath.

    Вывод ссылки на разработчика парсера XSLT:

    Этот небольшой код XSLT формирует ссылку на разработчика парсера XSLT. Во многих случаях она будет разная и содержать разные значения.

    Результатом обработки этого стиля ( test.xsl ) станет такой код:

    Этот код соответствует стандарту XHTML1.1 и был сформирован на основе исходного XML-документа. Для проверки можно воспользоваться валидатором от W3C, который расположен по адресу http://validator.w3.org/.

    В браузере этот код выглядит примерно так:

    IE 6 FireFox 3 Opera 9.02

    4. Приложение

    Ссылки на исходный код

    Постоянный адрес статьи //anton-pribora.ru/articles/xml/xslt-first-step/. /Автор: Прибора Антон Николаевич, 2009 год/

    Использование PHP5 для обработки XSLT

    Для получения результирующего документа при помощи PHP5 я использовал такой код:

    Дополнительную информацию по использованию XSLT в PHP5 можно найти по адресу http://ru2.php.net/manual/ru/book.xslt.php.

    Мысли вслух

    «Товарищи, мы стоим на краю огромной пропасти! И я предлагаю сделать большой, решительный шаг вперёд!»

    © 2020 Антон Прибора. При копировании материалов с сайта, пожалуйста, указывайте ссылку на источник.

    Что такое код xslt_set_encoding

    Скидка 25% на все тарифы хостинга по промокоду STDCITF

    XML и XSLT в примерах для начинающих

    Предварительная подготовка

    Для того, чтобы работать с данным документом, вам необходимо располагать как минимум браузером Internet Explorer версии 5.0 и выше. При этом будут работать некоторые из приведенных в тексте примеров.

    Для того, чтобы у вас работали все примеры, необходимо установить XML-парсер версии 3. Если пример работает только под управлением XML-парсера версии 3, то в каждом случае это оговаривается особо. Отметим, что версии IE вплоть до 5.5 используют более ранние версии парсера, поэтому устанавливать его все равно придется. О более старших версиях IE узнайте самостоятельно.
    Дистрибутив XML-парсера версии 3 можно найти по адресу http://msdn.microsoft.com/ XML/ XMLDownloads/ default.aspx.
    После установки парсера вам нужно будет зарегистрировать его в реестре. Для этого в командной строке необходимо выполнить команду: regsvr32 msxml3.dll . Затем необходимо сообщить IE, что вы намерены использовать этот парсер. Для этого нужно запустить утилиту xmlinst . Утилиту xmlinst можно найти по адресу http://msdn.microsoft.com/ library/ default.asp?url=/ downloads/ list/ xmlgeneral.asp. Вы можете также попробовать найти ответы на вопросы об установке XML-парсера по адресу http://www.netcrucible.com/xslt/msxml-faq.htm.

    А теперь перейдем к основной части нашего документа.

    Введение

    Рассмотрим простой пример XML-файла (ex01.xml).

    tutorial >
    title > «Заметки об XSL» title >
    author > Леонов Игорь Васильевич author >
    tutorial >

    Если мы откроем этот файл в браузере Internet Explorer, то мы увидим тот же самый текст, который приведен выше, вместе со всеми тегами и служебной информацией. Но нам не нужны теги и служебная информация! Мы хотим видеть только ту информацию, которая относится к делу, а при помощи тегов — управлять внешним видом этой информации. Эта задача решается легко и просто: необходимо к XML-файлу добавить шаблон преобразования — XSL-файл.

    Перепишем наш XML-файл в следующем виде (ex01-1.xml).

    tutorial >
    title > «Заметки об XSL» title >
    author > Леонов Игорь Васильевич author >
    tutorial >

    И создадим XSL-файл ex01-1.xsl. Текст файла приведен ниже.

    xsl:stylesheet version =» 1.0 » xmlns:xsl =» http://www.w3.org/TR/WD-xsl «>
    xsl:template match =» / «>
    p > strong > xsl:value-of select =» //title «/> strong > p >
    p > xsl:value-of select =» //author «/> p >
    xsl:template >
    xsl:stylesheet >

    Если мы теперь откроем файл ex01-1.xsl в браузере Internet Explorer, то мы увидим, что наша задача решена, — на экране осталась только необходимая нам информация, все теги исчезли. Результат, который вы получите на экране браузера, приведен ниже.

    «Заметки об XSL»

    Леонов Игорь Васильевич

    Легко также увидеть, что порядок вывода строк у нас определяется только содержанием шаблона преобразования — XSL-файла. При необходимости шаблон можно легко поменять, абсолютно не меняя наш основной XML-файл.

    Перепишем XML-файл. Информационную часть изменять не будем, а шаблон укажем другой ex01-2.xml.

    tutorial >
    title > «Заметки об XSL» title >
    author > Леонов Игорь Васильевич author >
    tutorial >

    Создадим XSL-файл ex01-2.xsl. Текст файла приведен ниже.

    xsl:stylesheet version =» 1.0 » xmlns:xsl =» http://www.w3.org/TR/WD-xsl «>
    xsl:template match =» / «>
    p > strong > xsl:value-of select =» //author «/> strong > p >
    p > xsl:value-of select =» //title «/> p >
    xsl:template >
    xsl:stylesheet >

    Если мы теперь откроем файл ex01-2.xsl в браузере Internet Explorer, то результат будет другим.

    Леонов Игорь Васильевич

    «Заметки об XSL»

    Отметим теперь момент, который является ключевым для разработчиков баз данных. Информация в XML-странице появляется, как правило, в результате запроса к базе данных. Запрос к базе данных в многопользовательской среде — это весьма дорогостоящая операция. Предположим теперь, что у нас нет XML и мы формируем стандартные статические HTML-страницы. В этом случае для решения задачи простого преобразования внешнего представления информации, например, для изменения сортировки, у нас есть два способа решения проблемы: выполнить запрос и сохранить результаты в каком-либо временном буфере на сервере или каждый раз при изменении внешнего представления выполнять новый запрос и формировать HTML-страницу заново.

    Первый способ требует трудоемкого программирования, второй способ значительно увеличивает нагрузку на сервер базы данных, производительность которого часто является узким местом системы, — пользователю всегда хочется получать результаты быстрее.

    XML и XSL — это исчерпывающее решение описанной выше проблемы. Фактически XML-страница — это и есть временный буфер для результатов запросов. Только вместо нестандартного и трудоемкого программирования мы теперь используем стандартный механизм XSL.

    Есть и еще одно соображение, которое может быть существенным для разработчиков баз данных. Большинство современных СУБД могут форматировать результаты запроса к базе данных в виде XML-файла. То есть при построении интерфейса пользователя в рамках технологии XML и XSL мы добиваемся определенной независимости от поставщика СУБД. В части организации вывода — практически полной независимости. А эта часть весьма велика в большинстве прикладных систем, ориентированных на работу с базами данных. Конечно, помимо вывода есть еще ввод и серверная обработка бизнес-логики, но здесь вам придется искать какие-то иные решения.

    Первые шаги

    Разберем теперь более подробно первый пример. Напомним его текст.

    tutorial >
    title > «Заметки об XSL» title >
    author > Леонов Игорь Васильевич author >
    tutorial >

    Первая строка информирует браузер о том, что файл имеет формат XML. Атрибут version является обязательным. Атрибут encoding не является обязательным, но если у вас в тексте есть русские буквы, то необходимо вставить этот атрибут, в противном случае XML-файл просто не будет обрабатываться, — вы получите сообщение об ошибке.

    Следующие строки — это тело XML-файла. Оно состоит из элементов, которые в совокупности образуют древовидную структуру. Элементы идентифицируются тегами и могут быть вложены друг в друга.

    Элементы могут иметь атрибуты, значения которых тоже могут обрабатываться в соответствии с шаблоном.


    На верхнем уровне XML-файла всегда находится один элемент. То есть файл вида

    tutorial >
    title > «Заметки об XSL» title >
    author > Леонов Игорь Васильевич author >
    tutorial >
    tutorial >
    title > «Введение в CSP» title >
    author > Леонов Игорь Васильевич author >
    tutorial >

    не будет обрабатываться браузером. Для преобразования в корректный XML-файл нужно добавить теги элемента верхнего уровня, например

    knowledgeDatabase >
    tutorial >
    title > «Заметки об XSL» title >
    author > Леонов Игорь Васильевич author >
    tutorial >
    tutorial >
    title > «Введение в CSP» title >
    author > Леонов Игорь Васильевич author >
    tutorial >
    /knowledgeDatabase >

    Отметим, что имена тегов чувствительны к регистру символов. Подробнее об этом можно прочесть в любой книге по XML — элементам и атрибутам в этих книгах уделяется достаточно большое внимание.

    Перейдем теперь к шаблону преобразования — к XSL-файлу. Задача XSL-файла — преобразовать дерево XML-файла в другое дерево, которое, например, будет соответствовать формату HTML и может быть изображено на экране браузера с учетом форматирования, выбора шрифтов и т.п.

    Для того, чтобы браузер выполнил необходимое преобразование, нужно в XML-файле указать ссылку на XSL-файл

    Рассмотрим теперь текст XSL-файла

    xsl:stylesheet version =» 1.0 » xmlns:xsl =» http://www.w3.org/TR/WD-xsl «>
    xsl:template match =» / «>
    p > strong > xsl:value-of select =» //title» «/> strong > p >
    p > xsl:value-of select =» //author «/> p >
    xsl:template >
    xsl:stylesheet >

    Первая строка файла содержит тег элемента xsl:stylesheet . Атрибуты элемента — номер версии и ссылка на пространство имен. Эти атрибуты элемента xsl:stylesheet являются обязательными. В нашем случае пространство имен — это все имена элементов и их атрибутов, которые могут использоваться в XSL-файле. Для XSL-файлов ссылка на пространство имен является стандартной.

    Заметим, что XSL-файл является одной из разновидностей XML-файлов. Он не содержит пользовательских данных, но формат его тот же самый. Файл содержит элемент верхнего уровня xsl:stylesheet , а далее идет дерево правил преобразования.

    В настоящем документе мы не будем подробно пояснять, что означает каждый элемент XSL-файла. Мы будем приводить различные примеры и показывать результат в каждом примере. Читатель сможет самостоятельно сопоставить различные элементы XSL-файла и инициируемые этими элементами преобразования исходного XML-файла с пользовательской информацией.

    В дальнейшем тексты XML- и XSL-файлов мы будем приводить в черно-белом варианте. Вы всегда сможете открыть реальный файл и посмотреть все в цвете. При необходимости закомментируйте ссылку на XSL-файл. Синтаксис комментария следующий — . В текст комментария нельзя вставлять символы — .

    В первом примере мы посмотрели, как с помощью элемента xsl:value-of можно вывести в HTML-формате содержание элемента (текст, заключенный между тегами). Теперь мы посмотрим, как при помощи того же самого элемента можно вывести значение атрибута элемента.

    Рассмотрим следующий XML-файл ex02-1.xml

    В этом файле информация хранится не в содержании элементов, а в виде значений атрибутов. Файл ex02-1.xsl имеет вид

    Обратите внимание на синтаксис ссылки на атрибут элемента — //dog/@name . Имя элемента и имя атрибута разделены парой символов » /@ «. В остальном синтаксис тот же самый, что и для ссылки на содержание элемента.

    Результат имеет следующий вид:

    Собака: Шарик. 18 кг, рыжий с черными подпалинами.

    Обратим теперь внимание на следующий момент. В XSL-файле мы никак не использовали элемент tutorial . На самом деле можно было использовать полный путь. Перепишем наш XML-файл, увеличив глубину дерева (ex02-2.xml)

    Файл ex02-2.xsl имеет вид

    Результат будет тем же самым.

    Собака: Шарик. 18 кг, рыжий с черными подпалинами.

    В этом примере мы использовали полную ссылку для значений атрибутов. При выводе одиночных значений оба варианта — полная и сокращенная ссылка — работают одинаково.

    На этом мы закончим разбор примеров с выводом одиночных значений и перейдем к выводу табличной информации — к выводу результатов запроса.

    Вывод результатов запроса

    До тех пор, пока мы работаем с несколькими реквизитами одного и того же объекта, разницы между XML и HTML практически нет. Однако стоит нам перейти к информации, содержащей несколько строк, как выгоды XML становятся очевидны. Но прежде чем перейти к выгодам, научимся выводить на экран простую таблицу.

    Рассмотрим следующий XML-файл — ex03.xml. Текст его приведен ниже.

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

    Простая таблица

    Первый шаг — это, как всегда, добавление шаблона преобразования. Модифицируем наш файл, добавив в него ссылку на шаблон. В результате получим файл ex03-1.xml.

    В этот файл добавлен шаблон преобразования ex03-1.xsl.

    Рассмотрим этот шаблон подробнее. Вот его текст.

    Кличка Вес Цвет

    Первая строка — новая для вас в XSL-файле (но не в XML-файлах!). Она говорит о том, что в XSL-файле нужно нормально воспринимать русские буквы. Без этой строки браузер не сможет корректно обработать русский текст в XSL-файле. Следующие две строки шаблона являются уже привычными. Следующие шесть строк — это строка, содержащая заголовки столбцов таблицы. Конструкция для извлечения текста заголовков таблицы вам уже знакома. А вот десятая строка тоже является новой:

    Этот элемент шаблона позволяет выбрать и просмотреть все группы информации, полный путь к которым задается списком тегов «tutorial/enimals/dogs/dog» . Обратите внимание — путь задается полностью, ни один из тегов опустить нельзя. Далее в ячейки таблицы помещается информация о наших собаках. В отличие от первых примеров путь к соответствующей информации тоже задается полностью. Попробуем, например, разместить информацию о кличке чуть-чуть иначе ex03-2.xml:

    Если мы в соответствующем XSL-файле поставим ссылку , то в соответствующем столбце никакой клички мы не увидим. Ссылка должна быть полной — . Вы можете самостоятельно поэкспериментировать с файлом ex03-2.xsl. Правильный результат приведен ниже.

    Кличка Вес Цвет
    Шарик 18 кг рыжий с черными подпалинами
    Тузик 10 кг белый с черными пятнами
    Бобик 2 кг бело-серый
    Трезор 25 кг черный

    Сортировка

    В предыдущих примерах порядок строк в таблице полностью соответствовал группам тегов в XML-файле. Этот порядок можно изменять. Добавим в тег

    Кличка Вес Цвет
    Бобик 2 кг бело-серый
    Трезор 25 кг черный
    Тузик 10 кг белый с черными пятнами
    Шарик 18 кг рыжий с черными подпалинами

    Более интересные результаты мы получим, если попытаемся отсортировать таблицу по столбцу «Вес». Вначале попробуем сделать по аналогии с предыдущим примером — атрибут order-by=»dogName» заменим на order-by=»dogWeight» . Результат приведен ниже (ex03-4.xml, ex03-4.xsl).

    Кличка Вес Цвет
    Тузик 10 кг белый с черными пятнами
    Шарик 18 кг рыжий с черными подпалинами
    Бобик 2 кг бело-серый
    Трезор 25 кг черный

    Таблица действительно отсортирована по столбцу «вес», но это не числовая, а строковая сортировка! Для того, чтобы браузер воспринял значения как числа, ему необходимо об этом сказать, — вместо order-by=»dogWeight» необходимо написать order-by=»number(dogWeight)» . Теперь мы получили правильный результат (ex03-5.xml, ex03-5.xsl).

    Кличка Вес Цвет
    Бобик 2 кг бело-серый
    Тузик 10 кг белый с черными пятнами
    Шарик 18 кг рыжий с черными подпалинами
    Трезор 25 кг черный

    Приведем теперь пример сортировки по нескольким столбцам. Различные элементы в атрибуте order-by должны разделяться символом » ; » — order-by=»number(dogWeight); dogName» (ex03-6.xml, ex03-6.xsl). Таблица приведена ниже.

    Кличка Вес Цвет
    Трезор 10 кг черный
    Тузик 10 кг белый с черными пятнами
    Бобик 18 кг бело-серый
    Шарик 18 кг рыжий с черными подпалинами

    Следующий пример работает только под управлением XML-парсера версии 3. В нем строки сортируются по одному столбцу — по кличке собаки. Этот пример уже приводился выше, однако теперь мы используем новый синтаксис (ex03-7.xml, ex03-7.xsl).

    При использовании нового синтаксиса используется ссылка на другое пространство имен

    Это очень важный момент, и его никогда нельзя упускать из виду.

    Кроме того, мы убрали атрибут order-by в элементе xsl:for-each и добавили другой элемент

    Если элемент xsl: sort присутствует в элементе xsl:for-each , то он всегда должен стоять сразу после элемента xsl:for-each . Синтаксис элемента xsl:sort достаточно очевиден. В нем используются два атрибута: атрибут order — способ сортировки (по возрастанию или по убыванию) и атрибут select — имя поля, по которому производится сортировка. Если нам нужно отсортировать по первому элементу, как в данном примере, то вместо » dogName » можно было поставить точку — » . «, для других элементов нужно указывать его имя, например » dogColor «, если нам нужно отсортировать записи по цвету собаки. На самом деле атрибутов может быть пять — select , lang , data-type , order и case-order , но мы не будем здесь рассматривать все эти атрибуты, поскольку здесь мы не преследуем цель дать полное описание всех элементов, используемых в XSL, и их атрибутов.

    Таблица результатов приведена ниже.

    Кличка Вес Цвет
    Бобик 2 кг бело-серый
    Трезор 25 кг черный
    Тузик 10 кг белый с черными пятнами
    Шарик 18 кг рыжий с черными подпалинами

    С использованием нового синтаксиса легко сменить сортировку по возрастанию на сортировку по убыванию (ex03-8.xml, ex03-8.xsl). Этот пример работает только под управлением XML-парсера версии 3.

    Разница заключается в одной строке

    Мы изменили значение атрибут order — значение ascending заменено на descending .

    Таблица результатов приведена ниже.

    Кличка Вес Цвет
    Шарик 18 кг рыжий с черными подпалинами
    Тузик 10 кг белый с черными пятнами
    Трезор 25 кг черный
    Бобик 2 кг бело-серый

    Покажем теперь сортировку по нескольким полям (ex03-9.xml, ex03-9.xsl). Этот пример работает только под управлением XML-парсера версии 3.

    В этом примере у нас фигурируют две строки с элементом xsl:sort .

    Строки вначале сортируются по весу собаки, а затем по их кличкам в алфавитном порядке. Обратите внимание — для того, чтобы сортировка выполнялась в числовой последовательности, в элемент xsl:sort мы добавили атрибут data-type . Таблица результатов приведена ниже.

    Кличка Вес Цвет
    Волчонок 3 кг темно-серый
    Трезор 10 кг черный
    Тузик 10 кг белый с черными пятнами
    Бобик 18 кг бело-серый
    Шарик 18 кг рыжий с черными подпалинами

    Заменив значение атрибута order by на descending , мы легко сгруппируем записи о собаках с одинаковым весом так, что клички будут идти в обратном алфавитном порядке. Соответствующий пример вы легко построите сами.

    Кличка Вес Цвет
    Волчонок 3 кг темно-серый
    Тузик 10 кг белый с черными пятнами
    Трезор 10 кг черный
    Шарик 18 кг рыжий с черными подпалинами
    Бобик 18 кг бело-серый

    Элемент XSL:IF — фильтр

    Рассмотрим теперь способы фильтрации строк таблицы. Первый пример использует старый синтаксис. В нем условие фильтрации указывается непосредственно в атрибуте select (ex04-1.xml, ex04-1.xsl).

    Ниже приведена строка, в которую мы внесли необходимые изменения.

    xsl:for-each select=»tutorial/enimals/dogs/dog [dogWeight$gt$10] » order-by=»number(dogWeight); dogName;»>

    И таблица результатов.

    Кличка Вес Цвет
    Шарик 18 кг рыжий с черными подпалинами
    Трезор 25 кг черный

    Вы видите, что в таблице остались только те собаки, чей вес превышает 10 кг, причем первым стоит Шарик, чей вес меньше.

    Все дальнейшие примеры в этом параграфе работают только под управлением XML-парсера версии 3.

    Более гибкие возможности нам предоставляет новый синтаксис (ex04-2.xml, ex04-2.xsl). Обратите внимание — в новом синтаксисе атрибут order-by в элементе xsl:for-each не поддерживается, вместо него мы вставили два элемента xsl:sort .


    Кроме того, условие фильтра у нас вынесено в отдельный элемент xsl:if .

    Не забывайте указывать конечный тег элемента xsl:if .

    В этом примере таблица результатов полностью аналогична предыдущей.

    Кличка Вес Цвет
    Шарик 18 кг рыжий с черными подпалинами
    Трезор 25 кг черный

    Полностью преимущества нового синтаксиса проявляются при использовании функций.

    Рассмотрим следующий пример (ex04-3.xml, ex04-3.xsl). В этом примере используется функция position() , определяющая порядковый номер фрагмента в исходном XML-файле.

    Соответствующий элемент xsl:if .

    Кличка Вес Цвет
    Шарик 18 кг рыжий с черными подпалинами
    Тузик 10 кг белый с черными пятнами

    Продемонстрируем теперь использование более интересных функций — start-with(string,startSubstring) и contains(string,anySubstring) . Функция start-with(string,startSubstring) проверяет, начинается ли строка string с подстроки startSubstring . Пример — ex04-4.xml, ex04-4.xsl).

    Синтаксис элемента xsl:if .

    В этом элементе мы использовали переменные. Значения переменных были инициализированы ранее

    Переменная varStartWith представляет собой подстроку, с которой должны начинаться требуемые нам клички. Она не меняется, поэтому инициализируется перед циклом. Переменная varDogName содержит кличку собаки, она меняется на каждом шаге цикла и, соответственно, инициализируется в теле цикла.

    Кличка Вес Цвет
    Тузик 10 кг белый с черными пятнами
    Трезор 25 кг черный

    Функция contains(string,anySubstring) проверяет, содержит ли строка string подстроку anySubstring . Пример — ex04-5.xml, ex04-5.xsl.

    Синтаксис элемента xsl:if .

    Этот пример полностью аналогичен предыдущему.

    Кличка Вес Цвет
    Бобик 2 кг бело-серый
    Трезор 25 кг черный

    Два элемента xsl:if , вложенные друг в друга, дают нам эффект оператора AND (ex04-6.xml, ex04-6.xsl).

    Соответствующий фрагмент XSL-файла.

    Кличка Вес Цвет
    Шарик 18 кг рыжий с черными подпалинами

    Можно добиться и эффекта оператора OR. Для этого нам нужно включить два цикла, в каждом из которых формируется своя выборка (ex04-7.xml, ex04-7.xsl).

    Соответствующий фрагмент XSL-файла.

    Кличка Вес Цвет
    Бобик 2 кг бело-серый
    Шарик 18 кг рыжий с черными подпалинами
    Трезор 25 кг черный

    Если сортировка не требуется, то можно вставить два элемента xsl:if в один элемент xsl:for-each .

    Элемент XSL:IF — улучшение внешнего вида таблиц

    Элемент xsl:if можно применять не только для фильтрации строк выборки. Очевидно, что он может быть полезен и во многих других областях. В этом параграфе мы разберем пример использования элемента xsl:if для улучшения внешнего вида таблицы. Заодно мы продемонстрируем реальное использование функции position() . Мы будем использовать эту функцию для того, чтобы чередовать цвет четных и нечетных строк таблицы (ex04-8.xml, ex04-8.xsl).

    Фрагмент XSL-файла, который отвечает за требуемое чередование.

    Кличка Вес Цвет
    Шарик 18 кг рыжий с черными подпалинами
    Тузик 10 кг белый с черными пятнами
    Бобик 2 кг бело-серый
    Трезор 25 кг черный

    Динамическое формирование атрибутов на примере параметров ссылки в теге

    Предположим теперь, что в каждой строке таблицы нам нужно сделать ссылку на некоторую страницу и передать на эту страницу два параметра — кличку и вес собаки. Понятно, что для каждой строки эти параметры — свои, и их нельзя прописать явно в XSL-файл. Тем не менее задача легко решается при помощи элемента xsl:attribute .

    Мы не будем здесь строить специальный пример, ограничимся только соответствующим фрагментом XSL-файла.

    И, наконец, мы ознакомились с комментариями в XSL-файлах. Это вторая строка приведенного фрагмента.

    На этом мы завершим рассмотрение возможностей чистого XSLT и перейдем к последнему параграфу в этом документе — к динамическому изменению содержимого Web-страницы при помощи возможностей JavaScript и XML/XSLT без каких-либо дополнительных обращений к базе данных.

    JavaScript и XML

    Объединим теперь наши знания XML с возможностями, которые нам предоставляет JavaScript. Предположим, что нам нужно иметь возможность динамически изменять сортировку столбцов таблицы при щелчке на заголовке того или иного столбца. Понятно, что для этого нам нужно иметь один XML-файл, содержащий строки таблицы, несколько XSL-файлов, каждый из которых содержит требуемую сортировку и нечто, что объединит это все вместе и заставит работать.

    Перейдем к реализации этой программы.

    В качестве XML-файла возьмем привычный нам файл со списком собак — ex05-1.xml. Обратите внимание — мы убрали из файла ссылку на XSL-файл — нам нужно менять шаблон преобразования динамически.

    Создадим также три XSL-файла, в каждом из которых у нас будет свой элемент xsl:sort , задающий сортировку строк — ex05-1a.xsl, ex05-1b.xsl, ex05-1c.xsl.

    Приведем здесь текст элемента xsl:sort для каждого файла

    Теперь нам осталось только объединить все это вместе. Ниже мы полностью приводим текст файла ex05-1.htm, сопроводив его необходимыми комментариями.

    При загрузке страницы создадим все необходимые объекты и выведем первоначальный вариант на экран.

    Encoding Класс

    Определение

    Представляет кодировку символов. Represents a character encoding.

    Примеры

    В следующем примере строка из одной кодировки преобразуется в другую. The following example converts a string from one encoding to another.

    Массив Byte [] является единственным типом в этом примере, который содержит закодированные данные. The byte[] array is the only type in this example that contains the encoded data. Типы char и String .NET представляют собой Юникод, поэтому GetChars вызов декодирует данные обратно в Юникод. The .NET Char and String types are themselves Unicode, so the GetChars call decodes the data back to Unicode.

    Комментарии

    Кодирование — это процесс преобразования набора символов Юникода в последовательность байтов. Encoding is the process of transforming a set of Unicode characters into a sequence of bytes. В отличие от декодирования — это процесс преобразования последовательности закодированных байтов в набор символов Юникода. In contrast, decoding is the process of transforming a sequence of encoded bytes into a set of Unicode characters. Сведения о форматах преобразования Юникода (утфс) и других кодировках Encoding, поддерживаемых, см. в разделе кодировка символов в .NET. For information about the Unicode Transformation Formats (UTFs) and other encodings supported by Encoding, see Character Encoding in .NET.

    Обратите Encoding внимание, что предназначено для работы с символами Юникода вместо произвольных двоичных данных, таких как байтовые массивы. Note that Encoding is intended to operate on Unicode characters instead of arbitrary binary data, such as byte arrays. Если необходимо закодировать произвольные двоичные данные в текст, следует использовать протокол, такой как uuencode, который реализуется такими методами Convert.ToBase64CharArray, как. If you must encode arbitrary binary data into text, you should use a protocol such as uuencode, which is implemented by methods such as Convert.ToBase64CharArray.

    .Net предоставляет следующие реализации Encoding класса для поддержки текущих кодировок Юникода и других кодировок: .NET provides the following implementations of the Encoding class to support current Unicode encodings and other encodings:

    ASCIIEncodingкодирует символы Юникода как однострочные 7-разрядные символы ASCII. ASCIIEncoding encodes Unicode characters as single 7-bit ASCII characters. Эта кодировка поддерживает только символьные значения в диапазоне от U + 0000 до U + 007F. This encoding only supports character values between U+0000 and U+007F. Кодовая страница 20127. Code page 20127. Также доступно через ASCII свойство. Also available through the ASCII property.

    UTF7Encodingкодирует символы Юникода в кодировке UTF-7. UTF7Encoding encodes Unicode characters using the UTF-7 encoding. Эта кодировка поддерживает все значения символов Юникода. This encoding supports all Unicode character values. Кодовая страница 65000. Code page 65000. Также доступно через UTF7 свойство. Also available through the UTF7 property.

    UTF8Encodingкодирует символы Юникода в кодировке UTF-8. UTF8Encoding encodes Unicode characters using the UTF-8 encoding. Эта кодировка поддерживает все значения символов Юникода. This encoding supports all Unicode character values. Кодовая страница 65001. Code page 65001. Также доступно через UTF8 свойство. Also available through the UTF8 property.

    UnicodeEncodingкодирует символы Юникода в кодировке UTF-16. UnicodeEncoding encodes Unicode characters using the UTF-16 encoding. Поддерживаются как прямой, так и обратный порядок байтов. Both little endian and big endian byte orders are supported. Также доступно через Unicode свойство BigEndianUnicode и. Also available through the Unicode property and the BigEndianUnicode property.

    UTF32Encodingкодирует символы Юникода в кодировке UTF-32. UTF32Encoding encodes Unicode characters using the UTF-32 encoding. Поддерживаются как с прямым порядком байтов (кодовая страница 12000), так и с обратным порядком байтов (кодовая страница 12001). Both little endian (code page 12000) and big endian (code page 12001) byte orders are supported. Также доступно через UTF32 свойство. Also available through the UTF32 property.

    Класс Encoding в основном предназначен для преобразования между различными кодировками и Юникодом. The Encoding class is primarily intended to convert between different encodings and Unicode. Часто один из производных классов Юникода является правильным выбором для вашего приложения. Often one of the derived Unicode classes is the correct choice for your app.

    Используйте метод для получения других кодировок и GetEncodings вызовите метод, чтобы получить список всех кодировок. GetEncoding Use the GetEncoding method to obtain other encodings, and call the GetEncodings method to get a list of all encodings.

    В следующей таблице перечислены кодировки, поддерживаемые .NET Framework и .NET Core. The following table lists the encodings supported by .NET Framework and .NET Core. В нем перечислены номера кодовой страницы каждой кодировки и значения свойств кодировки EncodingInfo.Name и EncodingInfo.DisplayName . It lists each encoding’s code page number and the values of the encoding’s EncodingInfo.Name and EncodingInfo.DisplayName properties. Флажок в столбцах поддержка .NET Framework и .NET Core указывает на то, что кодовая страница изначально поддерживается этой реализацией .NET, независимо от базовой платформы. A check mark in the .NET Framework support and .NET Core support columns indicates that the code page is natively supported by that .NET implementation, regardless of the underlying platform. Для .NET Framework доступность других кодировок, перечисленных в таблице, зависит от операционной системы. For .NET Framework, the availability of other encodings listed in the table depends on the operating system. Для .NET Core другие кодировки доступны с помощью System.Text.CodePagesEncodingProvider класса или путем наследования System.Text.EncodingProvider от класса. For .NET Core, other encodings are available by using the System.Text.CodePagesEncodingProvider class or by deriving from the System.Text.EncodingProvider class.

    Кодовые страницы EncodingInfo.Name , свойства которых соответствуют международным стандартам, не обязательно полностью соответствуют этому стандарту. Code pages whose EncodingInfo.Name property corresponds to an international standard do not necessarily comply in full with that standard.

    Кодовая страница Code page name Name Отображаемое имя Display name Поддержка .NET Framework .NET Framework support Поддержка .NET Core .NET Core support
    37 37 IBM037 IBM037 IBM EBCDIC (США-Канада) IBM EBCDIC (US-Canada)
    437 437 IBM437 IBM437 OEM США OEM United States
    500 500 IBM500 IBM500 IBM EBCDIC (Международная) IBM EBCDIC (International)
    708 708 ASMO-708 ASMO-708 Арабский (ASMO 708) Arabic (ASMO 708)
    720 720 DOS-720 DOS-720 Арабский (DOS) Arabic (DOS)
    737 737 ibm737 ibm737 Греческий (DOS) Greek (DOS)
    775 775 ibm775 ibm775 Балтийская (DOS) Baltic (DOS)
    850 850 ibm850 ibm850 Западная Европа (DOS) Western European (DOS)
    852 852 ibm852 ibm852 Центральноевропейская (DOS) Central European (DOS)
    855 855 IBM855 IBM855 OEM кириллица OEM Cyrillic
    857 857 ibm857 ibm857 Турецкий (DOS) Turkish (DOS)
    858 858 IBM00858 IBM00858 OEM многоязычная латиница I OEM Multilingual Latin I
    860 860 IBM860 IBM860 Португальский (DOS) Portuguese (DOS)
    861 861 ibm861 ibm861 Исландский (DOS) Icelandic (DOS)
    862 862 DOS-862 DOS-862 Иврит (DOS) Hebrew (DOS)
    863 863 IBM863 IBM863 Французская Канада (DOS) French Canadian (DOS)
    864 864 IBM864 IBM864 Арабский (864) Arabic (864)
    865 865 IBM865 IBM865 Скандинавский (DOS) Nordic (DOS)
    866 866 cp866 cp866 Кириллица (DOS) Cyrillic (DOS)
    869 869 ibm869 ibm869 Греческий, современный (DOS) Greek, Modern (DOS)
    870 870 IBM870 IBM870 IBM EBCDIC (многоязычная латиница-2) IBM EBCDIC (Multilingual Latin-2)
    874 874 Windows — 874 windows-874 Тайский (Windows) Thai (Windows)
    875 875 cp875 cp875 IBM EBCDIC (греческая современная) IBM EBCDIC (Greek Modern)
    932 932 shift_jis shift_jis Японская (Shift-JIS) Japanese (Shift-JIS)
    936 936 GB2312 gb2312 Китайская упрощенная (GB2312) Chinese Simplified (GB2312) ✓ ✓
    949 949 ks_c_5601-1987 ks_c_5601-1987 Корейский Korean
    950 950 традиционн big5 Китайская традиционная (Big5) Chinese Traditional (Big5)
    1026 1026 IBM1026 IBM1026 IBM EBCDIC (турецкая латиница-5) IBM EBCDIC (Turkish Latin-5)
    1047 1047 IBM01047 IBM01047 IBM Latin-1 IBM Latin-1
    1140 1140 IBM01140 IBM01140 IBM EBCDIC (США-Канада-евро) IBM EBCDIC (US-Canada-Euro)
    1141 1141 IBM01141 IBM01141 IBM EBCDIC (Германия-евро) IBM EBCDIC (Germany-Euro)
    1142 1142 IBM01142 IBM01142 IBM EBCDIC (Дания-Норвегия-евро) IBM EBCDIC (Denmark-Norway-Euro)
    1143 1143 IBM01143 IBM01143 IBM EBCDIC (Финляндия-Швеция-евро) IBM EBCDIC (Finland-Sweden-Euro)
    1144 1144 IBM01144 IBM01144 IBM EBCDIC (Италия-Европа) IBM EBCDIC (Italy-Euro)
    1145 1145 IBM01145 IBM01145 IBM EBCDIC (Испания-евро) IBM EBCDIC (Spain-Euro)
    1146 1146 IBM01146 IBM01146 IBM EBCDIC (Великобритания-Европа) IBM EBCDIC (UK-Euro)
    1147 1147 IBM01147 IBM01147 IBM EBCDIC (Франция-евро) IBM EBCDIC (France-Euro)
    1148 1148 IBM01148 IBM01148 IBM EBCDIC (Международная Европа) IBM EBCDIC (International-Euro)
    1149 1149 IBM01149 IBM01149 IBM EBCDIC (Исландский-евро) IBM EBCDIC (Icelandic-Euro)
    1200 1200 UTF-16 utf-16 Юникод Unicode ✓ ✓ ✓ ✓
    1201 1201 уникодефффе unicodeFFFE Юникод (с обратным порядком байтов) Unicode (Big endian) ✓ ✓ ✓ ✓
    1250 1250 Windows — 1250 windows-1250 Центральная Европа (Windows) Central European (Windows)
    1251 1251 Windows — 1251 windows-1251 Кириллица (Windows) Cyrillic (Windows)
    1252 1252 Windows — 1252 Windows-1252 Западная Европа (Windows) Western European (Windows) ✓ ✓
    1253 1253 Windows — 1253 windows-1253 Греческий (Windows) Greek (Windows)
    1254 1254 Windows — 1254 windows-1254 Турецкий (Windows) Turkish (Windows)
    1255 1255 Windows — 1255 windows-1255 Иврит (Windows) Hebrew (Windows)
    1256 1256 Windows — 1256 windows-1256 Арабский (Windows) Arabic (Windows)
    1257 1257 Windows — 1257 windows-1257 Балтийская (Windows) Baltic (Windows)
    1258 1258 Windows — 1258 windows-1258 Вьетнамский (Windows) Vietnamese (Windows)
    1361 1361 Johab Johab Корейский (Johab) Korean (Johab)
    10000 10000 « macintosh Западная Европа (Mac) Western European (Mac)
    10001 10001 x-Mac-японская x-mac-japanese Японская (Mac) Japanese (Mac)
    10002 10002 x-Mac-чинесетрад x-mac-chinesetrad Китайская традиционная (Mac) Chinese Traditional (Mac)
    10003 10003 x-Mac-Корейский x-mac-korean Корейский (Mac) Korean (Mac) ✓ ✓
    10004 10004 x-Mac-Арабская x-mac-arabic Арабский (Mac) Arabic (Mac)
    10005 10005 x-Mac-иврит x-mac-hebrew Иврит (Mac) Hebrew (Mac)
    10006 10006 x-Mac-греческая x-mac-greek Греческий (Mac) Greek (Mac)
    10007 10007 x-Mac-кириллица x-mac-cyrillic Кириллица (Mac) Cyrillic (Mac)
    10008 10008 x-Mac-чинесесимп x-mac-chinesesimp Китайская, упрощенное письмо (Mac) Chinese Simplified (Mac) ✓ ✓
    10010 10010 x-Mac-румынская x-mac-romanian Румынский (Mac) Romanian (Mac)
    10017 10017 x-Mac-украинский x-mac-ukrainian Украинский (Mac) Ukrainian (Mac)
    10021 10021 x-Mac-тайский x-mac-thai Тайский (Mac) Thai (Mac)
    10029 10029 x-Mac-CE x-mac-ce Центральноевропейская (Mac) Central European (Mac)
    10079 10079 x-Mac-Исландский x-mac-icelandic Исландский (Mac) Icelandic (Mac)
    10081 10081 x-Mac-Турецкая x-mac-turkish Турецкий (Mac) Turkish (Mac)
    10082 10082 x-Mac-Хорватский x-mac-croatian Хорватский (Mac) Croatian (Mac)
    12000 12000 UTF-32 utf-32 Юникод (UTF-32) Unicode (UTF-32) ✓ ✓ ✓ ✓
    12001 12001 utf-32BE utf-32BE Юникод (UTF-32 с обратным порядком байтов) Unicode (UTF-32 Big endian) ✓ ✓ ✓ ✓
    20000 20000 x-китайский — CNS x-Chinese-CNS Китайская традиционная (CNS) Chinese Traditional (CNS)
    20001 20001 x — cp20001 x-cp20001 TCA Тайваньская TCA Taiwan
    20002 20002 x-китайский — Eten x-Chinese-Eten Китайская традиционная (Eten) Chinese Traditional (Eten)
    20003 20003 x — cp20003 x-cp20003 IBM5550 Тайвань IBM5550 Taiwan
    20004 20004 x — cp20004 x-cp20004 Телетекст, Тайвань TeleText Taiwan
    20005 20005 x — cp20005 x-cp20005 Wang Тайвань Wang Taiwan
    20105 20105 x-IA5 x-IA5 Западная Европа (IA5) Western European (IA5)
    20106 20106 x-IA5-немецкий x-IA5-German Немецкий (IA5) German (IA5)
    20107 20107 x-IA5-шведский x-IA5-Swedish Шведский (IA5) Swedish (IA5)
    20108 20108 x-IA5-Норвежский x-IA5-Norwegian Норвежский (IA5) Norwegian (IA5)
    20127 20127 US-ASCII us-ascii US-ASCII US-ASCII ✓ ✓ ✓ ✓
    20261 20261 x — cp20261 x-cp20261 Т. 61 T.61
    20269 20269 x — cp20269 x-cp20269 ISO-6937 ISO-6937
    20273 20273 IBM273 IBM273 IBM EBCDIC (Германия) IBM EBCDIC (Germany)
    20277 20277 IBM277 IBM277 IBM EBCDIC (Дания-Норвегия) IBM EBCDIC (Denmark-Norway)
    20278 20278 IBM278 IBM278 IBM EBCDIC (Финляндия-Швеция) IBM EBCDIC (Finland-Sweden)
    20280 20280 IBM280 IBM280 IBM EBCDIC (Италия) IBM EBCDIC (Italy)
    20284 20284 IBM284 IBM284 IBM EBCDIC (Испания) IBM EBCDIC (Spain)
    20285 20285 IBM285 IBM285 IBM EBCDIC (ВЕЛИКОБРИТАНИЯ) IBM EBCDIC (UK)
    20290 20290 IBM290 IBM290 IBM EBCDIC (японская катакана) IBM EBCDIC (Japanese katakana)
    20297 20297 IBM297 IBM297 IBM EBCDIC (Франция) IBM EBCDIC (France)
    20420 20420 IBM420 IBM420 IBM EBCDIC (Арабская) IBM EBCDIC (Arabic)
    20423 20423 IBM423 IBM423 IBM EBCDIC (греческая) IBM EBCDIC (Greek)
    20424 20424 IBM424 IBM424 IBM EBCDIC (иврит) IBM EBCDIC (Hebrew)
    20833 20833 x-EBCDIC-Кореанекстендед x-EBCDIC-KoreanExtended IBM EBCDIC (Корейская расширенная) IBM EBCDIC (Korean Extended)
    20838 20838 IBM — тайский IBM-Thai IBM EBCDIC (тайский) IBM EBCDIC (Thai)
    20866 20866 koi8-r koi8-r Кириллица (KOI8-R) Cyrillic (KOI8-R)
    20871 20871 IBM871 IBM871 IBM EBCDIC (исландский) IBM EBCDIC (Icelandic)
    20880 20880 IBM880 IBM880 IBM EBCDIC (кириллица русская) IBM EBCDIC (Cyrillic Russian)
    20905 20905 IBM905 IBM905 IBM EBCDIC (Турецкая) IBM EBCDIC (Turkish)
    20924 20924 IBM00924 IBM00924 IBM Latin-1 IBM Latin-1
    20932 20932 EUC-JP EUC-JP Японская (JIS 0208-1990 и 0212-1990) Japanese (JIS 0208-1990 and 0212-1990)
    20936 20936 x — cp20936 x-cp20936 Китайская упрощенная (GB2312-80) Chinese Simplified (GB2312-80) ✓ ✓
    20949 20949 x — cp20949 x-cp20949 Корейский Wansung Korean Wansung ✓ ✓
    21025 21025 cp1025 cp1025 IBM EBCDIC (кириллица, Сербский — Болгарский) IBM EBCDIC (Cyrillic Serbian-Bulgarian)
    21866 21866 koi8-u koi8-u Кириллица (KOI8-U) Cyrillic (KOI8-U)
    28591 28591 ISO-8859-1 iso-8859-1 Западная Европа (ISO) Western European (ISO) ✓ ✓ ✓ ✓
    28592 28592 ISO-8859-2 iso-8859-2 Центральноевропейская (ISO) Central European (ISO)
    28593 28593 ISO-8859-3 iso-8859-3 Латиница 3 (ISO) Latin 3 (ISO)
    28594 28594 ISO-8859-4 iso-8859-4 Балтийская (ISO) Baltic (ISO)
    28595 28595 ISO-8859-5 iso-8859-5 Кириллица (ISO) Cyrillic (ISO)
    28596 28596 ISO-8859-6 iso-8859-6 Арабский (ISO) Arabic (ISO)
    28597 28597 ISO-8859-7 iso-8859-7 Греческий (ISO) Greek (ISO)
    28598 28598 ISO-8859-8 iso-8859-8 Иврит (ISO-Visual) Hebrew (ISO-Visual) ✓ ✓
    28599 28599 ISO-8859-9 iso-8859-9 Турецкий (ISO) Turkish (ISO)
    28603 28603 ISO-8859-13 iso-8859-13 Эстонский (ISO) Estonian (ISO)
    28605 28605 ISO-8859-15 iso-8859-15 Латиница 9 (ISO) Latin 9 (ISO)
    29001 29001 x — Европа x-Europa Европа Europa
    38598 38598 ISO-8859-8-i iso-8859-8-i Иврит (ISO-Logical) Hebrew (ISO-Logical) ✓ ✓
    50220 50220 ISO-2022-JP iso-2022-jp Японская (JIS) Japanese (JIS) ✓ ✓
    50221 50221 csISO2022JP csISO2022JP Японская (JIS, разрешить 1 байт Кана) Japanese (JIS-Allow 1 byte Kana) ✓ ✓
    50222 50222 ISO-2022-JP iso-2022-jp Японская (JIS — разрешить 1 байт Кана-SO/SI) Japanese (JIS-Allow 1 byte Kana — SO/SI) ✓ ✓
    50225 50225 ISO-2022-kr iso-2022-kr Корейский (ISO) Korean (ISO) ✓ ✓
    50227 50227 x-cp50227 x-cp50227 Китайская, упрощенное письмо (ISO-2022) Chinese Simplified (ISO-2022) ✓ ✓
    51932 51932 EUC-JP euc-jp Японский (EUC) Japanese (EUC) ✓ ✓
    51936 51936 EUC-CN EUC-CN Китайская упрощенная (EUC) Chinese Simplified (EUC) ✓ ✓
    51949 51949 euc-kr euc-kr Корейский (EUC) Korean (EUC) ✓ ✓
    52936 52936 Гц-GB-2312 hz-gb-2312 Китайская, упрощенное письмо (Гц) Chinese Simplified (HZ) ✓ ✓
    54936 54936 GB18030 GB18030 Китайская, упрощенное письмо (GB18030) Chinese Simplified (GB18030) ✓ ✓
    57002 57002 x-ISCII-de x-iscii-de ISCII — деванагари ISCII Devanagari ✓ ✓
    57003 57003 x-ISCII-составлять x-iscii-be ISCII Бенгальская ISCII Bengali ✓ ✓
    57004 57004 x-ISCII-TA x-iscii-ta ISCII — тамильский ISCII Tamil ✓ ✓
    57005 57005 x-ISCII-TE x-iscii-te ISCII — телугу ISCII Telugu ✓ ✓
    57006 57006 x-ISCII-AS x-iscii-as ISCII — Ассамская ISCII Assamese ✓ ✓
    57007 57007 x-ISCII-или x-iscii-or ISCII — Ория ISCII Oriya ✓ ✓
    57008 57008 x-ISCII-ка x-iscii-ka ISCII — каннада ISCII Kannada ✓ ✓
    57009 57009 x-ISCII-MA x-iscii-ma ISCII — малаялам ISCII Malayalam ✓ ✓
    57010 57010 x-ISCII-gu x-iscii-gu ISCII — гуджарати ISCII Gujarati ✓ ✓
    57011 57011 x-ISCII-PA x-iscii-pa Панджаби ISCII ISCII Punjabi ✓ ✓
    65000 65000 UTF-7 utf-7 Юникод (UTF-7) Unicode (UTF-7) ✓ ✓ ✓ ✓
    65001 65001 UTF-8 utf-8 Юникод (UTF-8) Unicode (UTF-8) ✓ ✓ ✓ ✓

    В следующем примере вызываются GetEncoding(Int32) методы GetEncoding(String) и для получения кодировки кодовой страницы греческого языка (Windows). The following example calls the GetEncoding(Int32) and GetEncoding(String) methods to get the Greek (Windows) code page encoding. Он сравнивает Encoding объекты, возвращаемые вызовами методов, чтобы показать, что они равны, а затем Maps отображает кодовую точку Юникода и соответствующее значение кодовой страницы для каждого символа в греческом алфавите. It compares the Encoding objects returned by the method calls to show that they are equal, and then maps displays the Unicode code point and the corresponding code page value for each character in the Greek alphabet.

    Если данные для преобразования доступны только в последовательных блоках (например, чтение данных из потока) или если объем данных настолько велик, что необходимо разделить на меньшие блоки, следует использовать Decoder или, Encoder предоставленный GetDecoder метод или GetEncoder метод, соответственно, производного класса. If the data to be converted is available only in sequential blocks (such as data read from a stream) or if the amount of data is so large that it needs to be divided into smaller blocks, you should use the Decoder or the Encoder provided by the GetDecoder method or the GetEncoder method, respectively, of a derived class.

    Кодировщики UTF-16 и UTF-32 могут использовать обратный порядок байтов (самый значащий байт) или обратный порядок байтов (минимальный значащий байт). The UTF-16 and the UTF-32 encoders can use the big endian byte order (most significant byte first) or the little endian byte order (least significant byte first). Например, Латинская прописная буква A (U + 0041) сериализуется следующим образом (в шестнадцатеричном формате): For example, the Latin Capital Letter A (U+0041) is serialized as follows (in hexadecimal):

    Порядковый номер UTF-16 с обратным порядком байтов: 00 41 UTF-16 big endian byte order: 00 41

    UTF-16 с прямым порядком байтов: 41 00 UTF-16 little endian byte order: 41 00

    UTF-32. обратный порядок байтов: 00 00 00 41 UTF-32 big endian byte order: 00 00 00 41

    UTF-32 с прямым порядком байтов: 41 00 00 00 UTF-32 little endian byte order: 41 00 00 00

    Обычно более эффективно хранить символы Юникода с помощью собственного порядка байтов. It is generally more efficient to store Unicode characters using the native byte order. Например, лучше использовать прямой порядок байтов на платформах с прямым порядком байтов, таких как компьютеры Intel. For example, it is better to use the little endian byte order on little endian platforms, such as Intel computers.

    GetPreamble Метод извлекает массив байтов, включающий метку порядка байтов (BOM). The GetPreamble method retrieves an array of bytes that includes the byte order mark (BOM). Если этот массив байтов имеет префикс в закодированном потоке, он позволяет декодеру указывать используемый формат кодирования. If this byte array is prefixed to an encoded stream, it helps the decoder to identify the encoding format used.

    Дополнительные сведения о порядке байтов и метке порядка байтов см. в стандарте Юникода на домашней странице Юникода. For more information on byte order and the byte order mark, see The Unicode Standard at the Unicode home page.

    Обратите внимание, что классы кодирования позволяют ошибкам: Note that the encoding classes allow errors to:


    Автоматическое изменение символа на символ «?». Silently change to a «?» character.

    Используйте символ «лучше подходит». Use a «best fit» character.

    Измените поведение приложения с помощью EncoderFallback классов и DecoderFallback с помощью символа замены Юникода U + FFFD. Change to an application-specific behavior through use of the EncoderFallback and DecoderFallback classes with the U+FFFD Unicode replacement character.

    При любой ошибке потока данных следует вызывать исключение. You should throw an exception on any data stream error. Приложение либо использует флаг «throwOnError», если применимо, либо использует EncoderExceptionFallback классы DecoderExceptionFallback и. An app either uses a «throwonerror» flag when applicable or uses the EncoderExceptionFallback and DecoderExceptionFallback classes. Резервные стратегии наилучшего соответствия часто не рекомендуются, так как это может привести к потере или путанице данных и медленнее, чем простые замены символов. Best fit fallback is often not recommended because it can cause data loss or confusion and is slower than simple character replacements. Для кодировок ANSI наилучшее поведение используется по умолчанию. For ANSI encodings, the best fit behavior is the default.

    Конструкторы

    Инициализирует новый экземпляр класса Encoding. Initializes a new instance of the Encoding class.

    Инициализирует новый экземпляр класса Encoding, соответствующий заданной кодовой странице. Initializes a new instance of the Encoding class that corresponds to the specified code page.

    Инициализирует новый экземпляр класса Encoding, соответствующий заданной кодовой странице, с использованием указанных стратегий резервирования кодировщика и декодера. Initializes a new instance of the Encoding class that corresponds to the specified code page with the specified encoder and decoder fallback strategies.

    Свойства

    Получает кодировку для набора символов ASCII (7-разрядных). Gets an encoding for the ASCII (7-bit) character set.

    Получает кодировку для формата UTF-16 с обратным порядком байтов. Gets an encoding for the UTF-16 format that uses the big endian byte order.

    При переопределении в производном классе получает имя текущей кодировки, которое может использоваться с тегами текста сообщения почтового агента. When overridden in a derived class, gets a name for the current encoding that can be used with mail agent body tags.

    При переопределении в производном классе получает идентификатор кодовой страницы текущего объекта Encoding. When overridden in a derived class, gets the code page identifier of the current Encoding.

    Возвращает или задает объект DecoderFallback для текущего объекта Encoding. Gets or sets the DecoderFallback object for the current Encoding object.

    Возвращает кодировку по умолчанию для данной реализации .NET. Gets the default encoding for this .NET implementation.

    Возвращает или задает объект EncoderFallback для текущего объекта Encoding. Gets or sets the EncoderFallback object for the current Encoding object.

    При переопределении в производном классе получает описание текущей кодировки, которое может быть прочитано пользователем. When overridden in a derived class, gets the human-readable description of the current encoding.

    При переопределении в производном классе получает имя текущей кодировки, которое может использоваться с тегами заголовка сообщения почтового агента. When overridden in a derived class, gets a name for the current encoding that can be used with mail agent header tags.

    При переопределении в производном классе получает значение, указывающее, может ли текущая кодировка использоваться клиентами браузера для отображения содержимого. When overridden in a derived class, gets a value indicating whether the current encoding can be used by browser clients for displaying content.

    При переопределении в производном классе получает значение, указывающее, может ли текущая кодировка использоваться клиентами браузера для сохранения содержимого. When overridden in a derived class, gets a value indicating whether the current encoding can be used by browser clients for saving content.

    При переопределении в производном классе получает значение, указывающее, может ли текущая кодировка использоваться клиентами электронной почты и новостей для отображения содержимого. When overridden in a derived class, gets a value indicating whether the current encoding can be used by mail and news clients for displaying content.

    При переопределении в производном классе получает значение, указывающее, может ли текущая кодировка использоваться клиентами электронной почты и новостей для сохранения содержимого. When overridden in a derived class, gets a value indicating whether the current encoding can be used by mail and news clients for saving content.

    При переопределении в производном классе получает значение, указывающее, является ли текущая кодировка доступной только для чтения. When overridden in a derived class, gets a value indicating whether the current encoding is read-only.

    При переопределении в производном классе получает значение, указывающее, используются ли в текущей кодировке однобайтовые кодовые точки. When overridden in a derived class, gets a value indicating whether the current encoding uses single-byte code points.

    Получает кодировку для формата UTF-16 с прямым порядком байтов. Gets an encoding for the UTF-16 format using the little endian byte order.

    Получает кодировку для формата UTF-32 с прямым порядком байтов. Gets an encoding for the UTF-32 format using the little endian byte order.

    Получает кодировку для формата UTF-7. Gets an encoding for the UTF-7 format.

    Получает кодировку для формата UTF-8. Gets an encoding for the UTF-8 format.

    При переопределении в производном классе получает для текущей кодировки имя, зарегистрированное в IANA (Internet Assigned Numbers Authority). When overridden in a derived class, gets the name registered with the Internet Assigned Numbers Authority (IANA) for the current encoding.

    При переопределении в производном классе получает кодовую страницу операционной системы Windows, наиболее точно соответствующую текущей кодировке. When overridden in a derived class, gets the Windows operating system code page that most closely corresponds to the current encoding.

    Методы

    При переопределении в производном классе создается неполная копия текущего объекта Encoding. When overridden in a derived class, creates a shallow copy of the current Encoding object.

    Преобразует весь массив байтов из одной кодировки в другую. Converts an entire byte array from one encoding to another.

    Преобразует диапазон байтов в массиве байтов из одной кодировки в другую. Converts a range of bytes in a byte array from one encoding to another.

    Определяет, равен ли указанный объект Object текущему экземпляру. Determines whether the specified Object is equal to the current instance.

    При переопределении в производном классе вычисляет количество байтов, полученных при кодировании набора символов, начиная с заданного указателя символа. When overridden in a derived class, calculates the number of bytes produced by encoding a set of characters starting at the specified character pointer.

    При переопределении в производном классе вычисляет количество байтов, полученных при кодировании всех символов из заданного массива символов. When overridden in a derived class, calculates the number of bytes produced by encoding all the characters in the specified character array.

    При переопределении в производном классе вычисляет количество байтов, полученных при кодировании набора символов из указанного массива символов. When overridden in a derived class, calculates the number of bytes produced by encoding a set of characters from the specified character array.

    При переопределении в производном классе вычисляет число байтов, полученных при кодировании символов в заданной строке. When overridden in a derived class, calculates the number of bytes produced by encoding the characters in the specified string.

    При переопределении в производном классе кодирует набор символов, начало которого задается указателем символа, в последовательность байтов, которые сохраняются, начиная с заданного указателя байта. When overridden in a derived class, encodes a set of characters starting at the specified character pointer into a sequence of bytes that are stored starting at the specified byte pointer.

    При переопределении в производном классе кодирует все символы из указанного массива символов в последовательность байтов. When overridden in a derived class, encodes all the characters in the specified character array into a sequence of bytes.

    При переопределении в производном классе кодирует набор символов из указанного массива символов в последовательность байтов. When overridden in a derived class, encodes a set of characters from the specified character array into a sequence of bytes.

    При переопределении в производном классе кодирует набор символов из указанного массива символов в указанный массив байтов. When overridden in a derived class, encodes a set of characters from the specified character array into the specified byte array.

    При переопределении в производном классе кодирует все символы заданной строки в последовательность байтов. When overridden in a derived class, encodes all the characters in the specified string into a sequence of bytes.

    При переопределении в производном классе кодирует набор символов из заданной строки в заданный массив байтов. When overridden in a derived class, encodes a set of characters from the specified string into the specified byte array.

    При переопределении в производном классе вычисляет количество символов, полученных при декодировании последовательности байтов, начало которой задается указателем байтов. When overridden in a derived class, calculates the number of characters produced by decoding a sequence of bytes starting at the specified byte pointer.

    При переопределении в производном классе вычисляет количество символов, полученных при декодировании всех байтов из заданного массива байтов. When overridden in a derived class, calculates the number of characters produced by decoding all the bytes in the specified byte array.

    При переопределении в производном классе вычисляет количество символов, полученных при декодировании последовательности байтов из заданного массива байтов. When overridden in a derived class, calculates the number of characters produced by decoding a sequence of bytes from the specified byte array.

    При переопределении в производном классе декодирует последовательность байтов, которая начинается с заданного указателя байта, в набор символов, которые сохраняются, начиная с заданного указателя символа. When overridden in a derived class, decodes a sequence of bytes starting at the specified byte pointer into a set of characters that are stored starting at the specified character pointer.

    При переопределении в производном классе декодирует все байты из указанного массива байтов в набор символов. When overridden in a derived class, decodes all the bytes in the specified byte array into a set of characters.

    При переопределении в производном классе декодирует последовательность байтов из указанного массива байтов в набор символов. When overridden in a derived class, decodes a sequence of bytes from the specified byte array into a set of characters.

    При переопределении в производном классе декодирует последовательность байтов из указанного массива байтов в указанный массив символов. When overridden in a derived class, decodes a sequence of bytes from the specified byte array into the specified character array.

    При переопределении в производном классе получает декодер, который преобразует последовательность байтов в последовательность символов. When overridden in a derived class, obtains a decoder that converts an encoded sequence of bytes into a sequence of characters.

    При переопределении в производном классе получает кодировщик, который преобразует последовательность символов Юникода в закодированную последовательность байтов. When overridden in a derived class, obtains an encoder that converts a sequence of Unicode characters into an encoded sequence of bytes.

    Возвращает кодировку, связанную с указанным идентификатором кодовой страницы. Returns the encoding associated with the specified code page identifier.

    Возвращает кодировку, связанную с указанным идентификатором кодовой страницы. Returns the encoding associated with the specified code page identifier. С помощью параметров задается обработчик ошибок для символов, которые не удается закодировать, и последовательностей байтов, которые не удается декодировать. Parameters specify an error handler for characters that cannot be encoded and byte sequences that cannot be decoded.

    Возвращает кодировку, связанную с указанным именем кодовой страницы. Returns the encoding associated with the specified code page name.

    Возвращает кодировку, связанную с указанным именем кодовой страницы. Returns the encoding associated with the specified code page name. С помощью параметров задается обработчик ошибок для символов, которые не удается закодировать, и последовательностей байтов, которые не удается декодировать. Parameters specify an error handler for characters that cannot be encoded and byte sequences that cannot be decoded.

    Возвращает массив, содержащий все кодировки. Returns an array that contains all encodings.

    Возвращает хэш-код текущего экземпляра. Returns the hash code for the current instance.

    При переопределении в производном классе вычисляет максимальное количество байтов, полученных при кодировании заданного количества символов. When overridden in a derived class, calculates the maximum number of bytes produced by encoding the specified number of characters.

    При переопределении в производном классе вычисляет максимальное количество символов, полученных при декодировании заданного количества байтов. When overridden in a derived class, calculates the maximum number of characters produced by decoding the specified number of bytes.

    При переопределении в производном классе возвращает последовательность байтов, задающую используемую кодировку. When overridden in a derived class, returns a sequence of bytes that specifies the encoding used.

    При переопределении в производном классе декодирует указанное количество байтов начиная с указанного адреса в строку. When overridden in a derived class, decodes a specified number of bytes starting at a specified address into a string.

    При переопределении в производном классе декодирует все байты из указанного массива байтов в строку. When overridden in a derived class, decodes all the bytes in the specified byte array into a string.

    При переопределении в производном классе декодирует последовательность байтов из указанного массива байтов в строку. When overridden in a derived class, decodes a sequence of bytes from the specified byte array into a string.

    Возвращает объект Type для текущего экземпляра. Gets the Type of the current instance.

    (Унаследовано от Object) IsAlwaysNormalized()

    Получает значение, которое указывает, является ли текущая кодировка всегда нормализованной с использованием формы нормализации по умолчанию. Gets a value indicating whether the current encoding is always normalized, using the default normalization form.

    При переопределении в производном классе получает значение, которое указывает, является ли текущая кодировка всегда нормализованной с использованием заданной по умолчанию формы нормализации. When overridden in a derived class, gets a value indicating whether the current encoding is always normalized, using the specified normalization form.

    Создает неполную копию текущего объекта Object. Creates a shallow copy of the current Object.

    (Унаследовано от Object) RegisterProvider(EncodingProvider)

    Регистрирует поставщик кодировки. Registers an encoding provider.

    Возвращает строку, представляющую текущий объект. Returns a string that represents the current object.


    Preserve xml encoding XSLT

    I have written an XSLT to process some set of XMLs.
    XSLT is processing fine, but these XMLs are having different set of encoding. Currently I am using output tag as shown:

    But this will forcefully change encoding to UTF-8 , but I need the value same as present in actual XML document.
    How can I get this?

    1 Answer 1

    But this will forcefully change encoding to UTF-8, but I need the value same as present in actual XML document.

    From the point of view of XML, there is no difference what encoding is used, as long as the proper characters are escaped (which is done for your by the XSLT processor). Every XML processor is required to support UTF-8, UTF-16 and US-ASCII. The latter can be used for instance if your XML must be transferred using old techniques that would otherwise mess with the UTF encoding (some older FTP systems for instance).

    That said, in XSLT 2.0 and 3.0 there are ways of doing this dynamically by simply using xsl:result-document , and a trick by loading the XML as unparsed text:

    Or even on xsl:output for XSLT 3.0 using

    • shadow attributes (a 3.0 feature)
    • inline anonymous function (an XPath 3.0 feature)
    • higher order functions, i.e. assigning the function to a variable (an XSLT 3.0 + XDM 3.0 feature) and using it (an XPath 3.0 feature, called a dynamic function call)
    • let expressions (an XPath 3.0 feature)
    • static parameters and variables (an XSLT 3.0 feature)

    In short, just a few lines of code that show quite a few new concepts of XSLT, XPath and XDM:

    This code runs correctly with Exselt, but my version of Saxon did not (yet) support it (it does not allow the use of unparsed-text in a static expression), but I’m sure that’ll come soon, or is something that is somehow configurable. I didn’t test other XSLT processors.

    Что такое код xslt_set_encoding

    xslt_set_encoding — Set the encoding for the parsing of XML documents

    Description vo >xslt_set_encoding ( resource xh, string encoding )

    Set the output encoding for the XSLT transformations. When using the Sablotron backend, this option is only available when you compile Sablotron with encoding support.

    sablotron and php have to be correctly linked with iconv library to get this function working

    IE on sabotron ./configure :
    —with-iconv-prefix=/your/path

    i’m usig it that way:

    $ht=xslt_create();
    xslt_set_encoding($ht,»ISO-8859-2″);
    $args = array ( ‘/_xml’ => $xml, ‘/_xslt’ => $xslt);
    $result=xslt_process($ht,’arg:/_xml’,’arg:/_xslt’,NULL,$args);

    Установка кодировки на выходе XSLT-трансформации

    Нашел в сети пример выполнения XSLT-трансформации. Все работает, вот только кодировка XML-файла на выходе не та, которая нужна. Подскажите как установить нужную (1251) в нижеследующем коде:

    03.03.2020, 13:58

    Ошибка при открытии xls-файла после xslt-трансформации
    Здравствуйте. После трансформации при открытии 2007-ым экселем возникает следующая ошибка Вот.

    Установка кодировки Mysql
    В phpmyadmin справа на главной странице пишет: Сервер: Localhost via UNIX socket Версия сервера.

    Установка кодировки в РНР
    Доброго всем времени суток Не могу понять как учтановить кодировку. Проблема в том что при.

    Установка верной кодировки для файлов
    суть проблемы:достал скрипт, все старницы в кракозябрах.разработчики написали, что он на кодировке.

    QtCreator, окно сообщения сборки. Установка кодировки.
    При сборке проекта в QtCreator при возникновении ошибки в окне сообщения сборки .

    XSLT: кодировка символов (en-dash)

    Я застрял в очень жуткой проблеме, пожалуйста, помогите мне.

    У меня есть файл ввода, который имеет некоторые символы (en-dash), SWITCH — Ethernet-доступ — это поле, имеющее символ обязательной записи в следующих входных данных.

    Когда я использую свой XSLT для преобразования, я получаю следующую ошибку.

    Ниже приводится код XSLT:

    Пожалуйста, найти что-то, почему это XSLT-код неудачу, когда ан-тире поддерживается в кодировке UTF-8.

    Создан 15 авг. 12 2012-08-15 08:03:15 user1578018

    1 ответ

    Вероятная причина заключается в том, что входной файл не является кодировкой UTF-8. Если на самом деле Windows-1252 (Windows Latin 1) закодирован, тогда EN DASH появляется в нем как октет 96 (шестнадцатеричный); когда данные интерпретируются как UTF-8, это вызывает условие ошибки, подобное тому, которое было сообщено.

    Чтобы проверить это, откройте входной файл, например. в Notepad ++ и установите кодировку в ANSI. Если он выглядит нормально (есть EN DASH, где вы ожидаете его), то мой анализ был правильным, и вам нужно преобразовать файл в UTF-8 с помощью команды в Notepad ++, а затем сохранить его.

    Существует множество способов изменить кодировку файла, я просто упомянул простую. Если файл динамически сгенерирован, вам необходимо изменить процесс генерации — или, возможно, объявить файл как закодированный как windows-1252, хотя это, как правило, не очень хорошая идея (ограничивает репертуар персонажа, который можно использовать).

    Создан 15 авг. 12 2012-08-15 08:24:09 Jukka K. Korpela

    Я скопировал данные в блокноте ++, а затем закодировал данные в UTF-8, x96 помещается на место en dash. , и если я конвертирую этот файл в формат UTF-8, то мой XSLT отлично работает. Это значит, что мне нужно преобразовать файл в кодировку UTF-8. Но проблема в файле сгенерирована автоматически, я не могу изменить его кодировку. Есть ли другой способ, которым я могу справиться с этим. Спасибо за помощь ур – user1578018 15 авг. 12 2012-08-15 09:38:35

    Если вы можете повлиять на начало файла данных, вы можете добавить ‘ ‘ Там, чтобы объявить кодировку Windows-1252. Кроме этого, я думаю, вам нужно будет повлиять на программу, используемую для открытия файла данных, говоря ей, чтобы использовать кодировку windows-1252. Доступ к этому файлу осуществляется через HTTP, вы можете использовать заголовок ‘Content-Type’. – Jukka K. Korpela 15 авг. 12 2012-08-15 10:12:41

    Да, вы правы, добавив В начало, разрешите мою проблему, теперь я вижу, позволяет ли мой код мне добавить это. Большое спасибо для ура большая помощь. – user1578018 15 авг. 12 2012-08-15 11:22:00

    @ user1578018, пожалуйста, * принимайте * ответ — нажав на галочку рядом с ним. – Dimitre Novatchev 15 авг. 12 2012-08-15 13:13:39

    Кодировка в XML документе

    XML документы могут содержать символы в различных международных кодировках.

    Чтобы не возникало ошибок, необходимо указывать, какая кодировка используется в XML документе, либо сохранять файл в универсальной кодировке UTF-8.

    Символьная кодировка

    Символьная кодировка определяет уникальный бинарный код для различных символов, используемых в документе.

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

    Юникод

    Юникод — это промышленный стандарт для символьной кодировки текстового документа. Он определяет (почти) все возможные международные символы по именам и числам.

    Юникод имеет две разновидности: UTF-8 и UTF-16.

    UTF = формат преобразования Юникода (анг. Unicode Transformation Format).

    UTF-8 использует один байт (8 бит) для представления общепринятых символов и два (или три) байта для всех остальных символов.

    UTF-16 использует два байта (16 бит) для большинства символов и три байта для всего остального.

    UTF-8 — Веб-стандарт

    UTF-8 — стандартная кодировка символов в сети Интернет.

    UTF-8 считается кодировкой по умолчанию в HTML-5, CSS, JavaScript, PHP, SQL и XML.

    Кодировка XML документа

    Первая строка в XML документе называется прологом:

    Пролог является необязательным и, как правило, содержит номер версии XML.

    Кроме этого, он может содержать информацию о кодировке XML документа. Следующий пролог определяет кодировку UTF-8:

    Стандартизация XML устанавливает, что все приложения XML должны понимать кодировки UTF-8 и UTF-16.

    UTF-8 является кодировкой по умолчанию для XML документов без информации о кодировке.

    Кроме этого, большинство систем приложений XML работают с такими кодировками, как ISO-8859-1, Windows-1252 и ASCII.

    Ошибки XML

    Очень часто XML документы создаются на одном компьютере, на сервер выгружается с другого, а в браузере отображаются на третьем компьютере.

    Если кодировка некорректно интерпретируется всеми тремя компьютерами, то браузер отобразит бессмысленный набор символов, либо вообще выдаст сообщение об ошибке.

    Наилучшим выбором в этом случае будет использование кодировки UTF-8. UTF-8 позволяет отображать практически все международные символы, и, кроме этого, она считается кодировкой по умолчанию, если не указана другая кодировка.

    Заключение

    Когда вы пишите XML документ:

    • Используйте текстовый редактор, который позволяет изменять кодировку документа
    • Убедитесь, что редактор настроен на использование нужной кодировки
    • Опишите используемую кодировку в соответствующей декларации
    • UTF-8 является самой безопасной кодировкой
    • UTF-8 является стандартом в сети Интернет
    Илон Маск рекомендует:  uCoz – универсальный сервис для создания сайтов любого типа
    Понравилась статья? Поделиться с друзьями:
    Кодинг, CSS и SQL