我需要生成一个XML,以便从我的SQL2005数据库加载到Internet站点上。一切正常,但是将文件加载到需要它的Web服务上时,出现此错误:
'。',十六进制值0x00,是无效字符。第1行,位置 41。
xml代码可以正常工作,但是我认为问题出在文件中。 Xml是通过该查询生成的
set @cmd = 'bcp "SELECT XML FROM ' + @DBNAME + '.dbo.FATTELETTR WHERE PROGRESSIVO LIKE ' + @PROGRESSIVO + ' " queryout ' + @Filename + ' -U user -P pass -w -r -t -x';
--print @cmd
EXEC XP_CMDSHELL @cmd, no_output;
这是一个文件示例:
<?xml version="1.0" encoding="UTF-8" ?> <p:FatturaElettronica versione="FPR12" xmlns:ds="http://www.w3.org/2000/09/xmldsig#" xmlns:p="http://ivaservizi.agenziaentrate.gov.it/docs/xsd/fatture/v1.2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://ivaservizi.agenziaentrate.gov.it/docs/xsd/fatture/v1.2 http://www.fatturapa.gov.it/export/fatturazione/sdi/fatturapa/v1.2/Schema_del_file_xml_FatturaPA_versione_1.2.xsd">
<FatturaElettronicaHeader>
................ content............
</FatturaElettronicaHeader>
<FatturaElettronicaBody>
................ content............
</FatturaElettronicaBody></p:FatturaElettronica>
如果我直接获取生成的文件,则报错,如果获取xml内容,则显示INSTEAD,创建一个新的xml文件,然后将复制的内容粘贴到手动创建的文件中,一切正常,我没有错误。
另外,如果我尝试在Internet Explorer上打开xml文件,则生成的sql为空,我看到一个空白页,而是加载了手动创建的sql。
因此文件有问题。但是哪个呢?
答案 0 :(得分:0)
您的XML文件的编码被声明为UTF-8 <?xml version="1.0" encoding="UTF-8" ?>
,但是SQL Server不支持UTF-8。它对Unicode数据使用UTF-16。因此,磁盘上的文件存储为UTF-16(每个符号2个字节),同时您指示XML解析器将其读取为UTF-8(可变符号长度),其中1个字节用于基本拉丁字符和数字。例如,在UTF-8中,字母A
被编码为一个字节41
,在UTF-16中则被编码为2个字节0041
。前导00
最有可能是引起错误的那个。
您必须将XML文件的声明编码更改为UTF-16,或者更改保存XML数据的方式以匹配声明的编码。