【发布时间】:2012-06-08 10:17:28
【问题描述】:
我将 XML 存储在 SQL Server 的 XML 列中。 SQL Server 在内部以 UTF-16 存储数据。因此,存储的 XML 必须采用 UTF-16 格式。
我的 XML 是 utf-8 格式,上面有这个声明:
<?xml version="1.0" encoding="UTF-8" ?>
当我尝试使用 UTF-8 声明插入 xml 时,我收到一个异常,说明有关编码的内容。我可以通过两种方式轻松解决此问题:
通过删除声明或
通过将声明更改为
:
<?xml version="1.0" encoding="UTF-16" ?>
问题
我不知道删除或替换声明是否“安全”或正确。我会丢失数据,还是 XML 会损坏?还是我必须将 C# 中的字符串从 utf-8 转换为 utf-16?
【问题讨论】:
-
引用您遇到但目前不理解的任何异常总是一个好主意。
-
如果您将文件存储为文本,则将它们存储为文本(即也将它们视为文本,这意味着应用通用编码)。当然,这需要您删除内联编码声明。我只是将它们存储为 blob,但这消除了这些考虑。
-
SQL Server 在内部将数据存储为 UCS-2,而不是 UTF-16。这仅在您使用 UTF-16 代理对时才真正重要。
-
xml 有多大?如果它很小,您可以在 C# 中轻松加载它并保存到 StringWriter,它将使用 UTF-16
-
@Ed Harper:也许您可以解释一下如果您在 C# 中读取代理对并将其传输到 SQL Server 会发生什么?特别是如果您将
encoding="UTF-16"放在必须是 UCS-2 的 C# 字符串上。
标签: c# sql-server xml