我有一个应用程序,从一些用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
类型的列。
我通过 Google 找到了一些解决方案,发现了 Utf8String: http://msdn.microsoft.com/en-us/library/ms160893(v=sql.90).aspx
我安装了它,并尝试将 XML 转换为 Utf8String,然后再将其转换回普通的 varchar
,最后转换为 XML
并插入到我的表中,但看起来它没有改变 XML 内部的任何字符,它只是改变了变量的类型,这并没有解决我的问题。
我还发现有人提出了一种解决类似问题的建议,即编写一个过程,循环遍历变量中的每个字符(在我的情况下是 XML)并手动更改其编码,但这位大佬还说这可能会工作缓慢。这真的是解决我的问题的唯一选择吗?
UTF-8
替换为UTF-16
:REPLACE(@xmlstr, 'encoding="UTF-8"', 'encoding="UTF-16"')
,因为它确实是 utf-16 编码的(这就是前导的N
的含义)。 - Ian Boyd