Неверный символ в XML, сгенерированный SQL - PullRequest
0 голосов
/ 22 января 2019

Мне нужно сгенерировать xml для загрузки на интернет-сайте из моей базы данных SQL2005. Все работает нормально, но когда файл загружен на веб-сервис, который нуждается в этом, у меня есть эта ошибка:

'.', Шестнадцатеричное значение 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>

Если я возьму непосредственно сгенерированный файл, у меня будет ошибка, INSTEAD, если я возьму XML-содержимое, создаю новый XML-файл и вставляю скопированное содержимое в один созданный вручную, все работает нормально, и у меня нет ошибка.

Кроме того, если я попытаюсь открыть в Internet Explorer файлы xml, созданный файл sql будет пустым, я вижу пустую страницу, а созданная вручную загружается нормально.

Итак, проблема в файле. А что есть?

1 Ответ

0 голосов
/ 23 января 2019

Кодировка вашего XML-файла объявлена ​​как UTF-8 <?xml version="1.0" encoding="UTF-8" ?>, но 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 в соответствии с заявленной кодировкой.

...