4

我有一个应用程序从一些用 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);

ValidXML是一个XML类型列。

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

我安装了它,并尝试将 XML 转换为 Utf8String ,然后将其再次转换为 normal varchar,然后再转换为XML,并将其插入到我的表中,但看起来它并没有更改此 XML 中的任何字符,它只是更改了变量的类型它并没有解决我的问题。

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

4

2 回答 2

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
于 2013-06-03T08:31:17.590 回答
1

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

当你解析这个 xml 给出错误

消息 6602,级别 16,状态 2,过程 sp_xml_preparedocument,第 1 行错误描述为“不支持从当前编码切换到指定编码。”。

要解决上述错误,简单的步骤是使用 SQL 替换功能

REPLACE('@xmldata','utf-16','') 或 REPLACE('@xmldata','utf-16','utf-8')

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

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

于 2014-05-20T09:13:26.037 回答