加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

sql-server – SQL Insert上的非法xml字符

发布时间:2020-12-12 07:00:03 所属栏目:MsSql教程 来源:网络整理
导读:我试图将以下字符串插入到sql xml字段中 ?xml version="1.0" encoding="UTF-8"?Response Ipx.x.x.x/Ip CountryCodeCA/CountryCode CountryNameCanada/CountryName RegionCodeQC/RegionCode RegionNameQuébec/RegionName CityDorval/City ZipCodeh9p1j3/ZipCo
我试图将以下字符串插入到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>')

成功了!

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读