在 XML 数据中使用 Unicode

SQL Server 使用 UTF-16 编码架构存储 XML 数据。因为 UTF-16 数据具有可变宽度,所以根据面向字节的协议来处理。这意味着可以通过独立于不同计算机上的字节顺序的方式处理 UTF-16 数据(little endian 对 big endian)。因此,UTF-16 非常适用于遍历使用不同编码和字节顺序系统的计算机。因为 XML 数据通常在网络上广泛共享,所以在数据库中维护 XML 数据的默认 UTF-16 存储很有意义,在将 XML 数据导出到客户端时也是如此。

如果必须指定不同的编码,可以使用 FOR XML 请求并指定下列内容:

  • 在 Active Server Pages (ASP) 中指定 XML 格式数据流 Response 对象的 Output Encoding 属性。

    例如,下列 ASP 代码告诉浏览器以 UCS-2 显示传入 XML 数据流。

    <% cmdXML.Properties("Output Encoding") = "UCS-2" %>
    
  • 进行 HTTP 请求时,在 URL 中指定输出编码。

    下列示例指定 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 样式表中指定了编码,该编码将覆盖模板中指定的任何编码。但是,在 XSL 样式表和模板上指定的编码都会被 ASP 页上指定的 Output Encoding 属性覆盖。

当使用 OPENXML 将数据插入到 SQL Server 数据库中时,应在可能出现多语言数据的行集中指定 Unicode 数据类型。这将最大程度地降低字符损坏的可能性。

请参阅

参考