sql-server – SQL Insert上的非法xml字符
|
我试图将以下字符串插入到sql xml字段中 <?xml version="1.0" encoding="UTF-8"?>
<Response>
<Ip>x.x.x.x</Ip>
<CountryCode>CA</CountryCode>
<CountryName>Canada</CountryName>
<RegionCode>QC</RegionCode>
<RegionName>Québec</RegionName>
<City>Dorval</City>
<ZipCode>h9p1j3</ZipCode>
<Latitude>45.45000076293945</Latitude>
<Longitude>-73.75</Longitude>
<MetroCode></MetroCode>
<AreaCode></AreaCode>
</Response>
插入代码如下所示: INSERT
INTO Traffic(...,xmlGeoLocation,...)
VALUES (
...
<!---
<cfqueryparam CFSQLType="cf_sql_varchar" value="#xmlGeoLocation#">,--->
'#xmlGeoLocation#',...
)
发生了两件坏事: >魁北克变成了Québec 更新: 传入的测试流主要是单字节字符. é是一个双字节字符.特别是C3A9 此外,我无法控制传入的xml流 解决方法我要剥掉标题……我有一个有趣的小撇号的问题.我认为问题是,当字符串转换为XML时,它不再是UTF-8,但sql server正在尝试使用标头对其进行解码.如果它是VARCHAR,则它在客户端的编码中.如果它是NVARCHAR,那就是UTF-16.以下是我测试的一些变化: SQL(varchar,UTF-8): SELECT CONVERT(XML,'<?xml version="1.0" encoding="UTF-8"?><t>We’re sorry</t>') 错误: XML parsing: line 1,character 44,illegal xml character SQL(nvarchar,N'<?xml version="1.0" encoding="UTF-8"?><t>We’re sorry</t>') 错误: SQL(varchar,UTF-16) SELECT CONVERT(XML,'<?xml version="1.0" encoding="UTF-16"?><t>We’re sorry</t>') 错误: XML parsing: line 1,character 39,unable to switch the encoding SQL(nvarchar,N'<?xml version="1.0" encoding="UTF-16"?><t>We’re sorry</t>') 成功了! (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
