我试图将以下字符串插入到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
>我收到错误说[Macromedia] [sqlServer JDBC Driver] [sqlServer] XML解析:第8行,第16个字符,非法xml字符
更新:
传入的测试流主要是单字节字符.
é是一个双字节字符.特别是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>')
错误:
XML解析:第1行,第38个字符,无法切换编码
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>')
成功了!
原文地址:https://www.jb51.cc/mssql/77252.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。