【问题标题】:Invalid Character on XML generated by SQLSQL 生成的 XML 上的无效字符
【发布时间】:2019-06-15 22:00:39
【问题描述】:

我需要从我的 SQL2005 DB 生成一个 xml 以加载到 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 内容,则创建一个新的 xml 文件,并将复制的内容粘贴到手动创建的文件中,一切正常,我没有错误。

另外,如果我尝试在 Internet Explorer 上打开 xml 文件,生成的 sql 文件是空的,我看到一个空白页面,而手动创建的页面加载正常。

所以文件有问题。但哪个是?

【问题讨论】:

    标签: sql-server xml utf-8 sql-server-2005 bcp


    【解决方案1】:

    您的 XML 文件的编码被声明为 UTF-8 &lt;?xml version="1.0" encoding="UTF-8" ?&gt;,但 SQL Server 不支持 UTF-8。它使用 UTF-16 处理 unicode 数据。因此,您在磁盘上的文件存储为 UTF-16,每个符号 2 个字节,而您指示 XML 解析器将其读取为 UTF-8,可变符号长度,1 个字节用于基本拉丁字符和数字。例如,在 UTF-8 中,字母 A 被编码为一个字节 41,在 UTF-16 中它是 2 个字节 0041。这个领先的00 很可能是导致错误的原因。

    您必须将 XML 文件的声明编码更改为 UTF-16,或者更改保存 XML 数据的方式以匹配声明的编码。

    【讨论】:

    • 如何在 sql 中用 utf8 更改 utf16?或者我可以使用什么来处理创建的 xml 并将其从 16 更改为 utf8?另一个软件?批处理文件?我会用一些东西来自动化这个过程。
    • 您的问题并未说明您如何生成此 XML。在那里改变它。关于转换编码可以看UTF-16 to UTF-8 conversion
    猜你喜欢
    • 2013-12-23
    • 2015-09-19
    • 2023-03-11
    • 2021-11-01
    • 2023-03-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多