在SQL Server中将UTF8转换为uTF16

时间:2013-06-03 08:27:02

标签: sql-server xml utf-8

我有一个应用程序从一些用PHP编写的Web服务接收XML并将其插入SQL Server数据库。当我尝试插入包含波兰变音字符的收到的XML时,我收到如下错误:

  

XML解析:第2行,第703个字符,非法xml字符

我试着这样做:

DECLARE @xml XML;
SET @xml = '(here I paste some sample XML that contains diacritical characters)';
SELECT @xml = CAST(@xmlstr AS XML);
INSERT INTO vos_DirectXML_ut(ValidXML,synchronization_time,synchronization_type,MethodName)
VALUES(@xml,GETDATE(),@SynchroType,@method);

ValidXMLXML类型列。

我用谷歌搜索找到一些解决方案,我找到了Utf8String: http://msdn.microsoft.com/en-us/library/ms160893(v=sql.90).aspx

我安装了它,并尝试将XML转换为Utf8String,然后再将其转换为普通varchar,然后再转换为XML,并将其插入我的表中,但看起来它没有变化这个XML里面的任何字符,它只是改变了变量的类型,并没有解决我的问题。

我还发现了一些人的建议,通过为变量中的每个字符(在我的情况下为XML)编写循环程序并手动更改其编码,可以解决类似的问题,但是这个人也说它可能有效慢。这真的是解决我问题的唯一选择吗?

2 个答案:

答案 0 :(得分:2)

尝试施放到UNICODE:

DECLARE @xmlstr NVARCHAR(MAX) --<--
SELECT @xmlstr = N'(some sample XML that contains diacritical characters)'; --<-- N''

DECLARE @xml XML
SELECT @xml = CAST(@xmlstr AS XML)

INSERT INTO dbo.vos_DirectXML_ut
( 
      ValidXML
    , synchronization_time 
    , synchronization_type 
    , MethodName
)
SELECT 
      @xml 
    , GETDATE() 
    , @SynchroType 
    , @method

答案 1 :(得分:1)

对于XML文件,SQL Server 2008 R2不支持UTF-16,因此对于以

开头的xml文件

解析此xml时会出现错误

消息6602,级别16,状态2,过程sp_xml_preparedocument,第1行 错误说明是“从当前编码切换到不支持的指定编码。&#39;。

解决上述错误的简单步骤是使用SQL替换函数

REPLACE(&#39; @ xmldata&#39;,&#39; utf-16&#39;,&#39;&#39;)或REPLACE(&#39; @ xmldata&#39;,&# 39; UTF-16&#39;,&#39; UTF-8&#39)

我使用xml文件处理过3个程序,每当我尝试使用utf-16 XML解析器时都会出错。

始终对SQL Server 2008 R2使用utf-8