Использование Юникода с XML-данными
SQL Server хранит XML-данные с использованием схемы кодирования UTF-16. Поскольку данные UTF-16 имеют переменную длину, они обрабатываются побайтно. Это значит, что данные UTF-16 могут интерпретироваться независимо от порядка байтов на различных компьютерах (прямого или обратного). Следовательно, формат UTF-16 оптимален для использования на различных компьютерах с различными системами кодирования и порядком байтов. Поскольку обычно XML-данные широко используются в различных сетях, важно поддерживать способ хранения XML-данных в базе данных в формате UTF-16 и при экспорте XML-данных для клиентов.
Если необходимо применять другую схему кодирования, вот что можно задать с помощью запросов FOR XML.
Свойство Кодирование вывода объекта потока XML-данных Response на страницах активного сервера (ASP).
Например, следующий ASP-код предписывает обозревателю отобразить входящий поток XML-данных в формате UCS-2:
<% cmdXML.Properties("Output Encoding") = "UCS-2" %>
Схему кодирования вывода в URL-адресе при выполнении HTTP-запроса.
Следующий пример задает UCS-2 в качестве схемы кодирования вывода XML-документа, возвращаемого этим запросом:
http://IISServer/nwind?sql=SELECT+*+FROM+Customers+FOR+XML+AUTO&outputencoding=UCS-2
Схему кодирования в XML-шаблоне или таблице стилей.
Следующий пример задает UCS-2 в качестве схемы кодирования вывода в заголовке этого документа XML-шаблона:
<?xml version ='1.0' encoding='UCS-2'?> <root xmlns:sql='urn:schemas-microsoft-com:xml-sql' sql:xsl='MyXSL.xsl'> <sql:query> SELECT FirstName, LastName FROM Employees FOR XML AUTO </sql:query> </root>
Обратите внимание, что если схема кодирования задается непосредственно в таблице стилей XSL, это переопределяет любую схему кодирования, заданную в шаблоне. Тем не менее и то, и другое переопределяется свойством Кодирование вывода, заданным на ASP-странице.
При вставке данных в базу данных SQL Server с помощью выражения OPENXML следует указывать типы данных Юникода во всех частях набора строк, где могут выводиться данные на нескольких языках. Это минимизирует искажение символов.