Jam*_*ler 8 sql-server coldfusion xml-parsing coldfusion-9
我试图将以下字符串插入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>
Run Code Online (Sandbox Code Playgroud)
插入代码如下所示:
INSERT
INTO Traffic(... , xmlGeoLocation, ...)
VALUES (
...
<!---
<cfqueryparam CFSQLType="cf_sql_varchar" value="#xmlGeoLocation#">,
--->
'#xmlGeoLocation#',
...
)
Run Code Online (Sandbox Code Playgroud)
发生了两件坏事:
魁北克变成了Québec
我收到一个错误说 [Macromedia][SQLServer JDBC Driver][SQLServer]XML parsing: line 8, character 16, illegal xml character
更新:
传入的测试流主要是单字节字符.
é是一个双字节字符.特别是C3A9
此外,我无法控制传入的xml流
小智 14
我要剥掉标题......
我有一个有趣的小撇号的问题.我认为问题在于,当字符串转换为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>')
Run Code Online (Sandbox Code Playgroud)
错误:
XML parsing: line 1, character 44, illegal xml character
Run Code Online (Sandbox Code Playgroud)
SQL(nvarchar,UTF-8):
SELECT CONVERT(XML,N'<?xml version="1.0" encoding="UTF-8"?><t>We’re sorry</t>')
Run Code Online (Sandbox Code Playgroud)
错误:XML解析:第1行,第38个字符,无法切换编码
SQL(varchar,UTF-16)
SELECT CONVERT(XML,'<?xml version="1.0" encoding="UTF-16"?><t>We’re sorry</t>')
Run Code Online (Sandbox Code Playgroud)
错误:
XML parsing: line 1, character 39, unable to switch the encoding
Run Code Online (Sandbox Code Playgroud)
SQL(nvarchar,UTF-16)
SELECT CONVERT(XML,N'<?xml version="1.0" encoding="UTF-16"?><t>We’re sorry</t>')
Run Code Online (Sandbox Code Playgroud)
成功了!
归档时间: |
|
查看次数: |
22028 次 |
最近记录: |