powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Ошибка при формировании XML UTF-8
21 сообщений из 46, страница 2 из 2
Ошибка при формировании XML UTF-8
    #39621319
ArkadyL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я буду благодарен за пример усовершенствования кода.
Полагаю, что данные нам присылают в XML-формате, потому что именно о нём постоянно упоминается в руководстве. Но это не имеет теперь никакого значения, т. к. файлы мы успешно принимаем и обрабатываем. И, кстати, сохраняем на память именно в поле типа xml. Видимо, сервер сам умело управляется с заголовком.
Проблема была в том, что и мы самонадеянно хотели сохранить у себя отправляемый файл тоже в поле типа xml. Но нас вполне устраивает и хранение в varchar(max). По крайней мере, тестовый ответ тоже был благополучно принят в ЦБ.
...
Рейтинг: 0 / 0
Ошибка при формировании XML UTF-8
    #39621330
Гигабайт Мегабайтович Килобайтов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
если вы не поймёте что "xml-формат" не равно "текстовый файл" , то всякие "улучшения" кода вам не помогут.
Пы.Сы. вот почему моё мнение что, неявная конвертация типов в ms sql зло ))
...
Рейтинг: 0 / 0
Ошибка при формировании XML UTF-8
    #39621333
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ТС,
возьмите XMLSpy и делайте со своими xml-файлами что хотите и как хотите
...
Рейтинг: 0 / 0
Ошибка при формировании XML UTF-8
    #39622450
ArkadyL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Гигабайт Мегабайтович КилобайтовArkadyL@ES550PFile - в этой переменной имя файла, и он XML, считывается из заданного каталога. А отправляет их собственными руками наш сотрудник из личного кабинета банка.
в файле, в текстовом формате записаны данные, которые могут представлены в xml-формате ( а могут быть и не представлены) . xml - это не файл , это формат данных, а вот в чем он храниться - тут возможны варианты ))
у вас по факту - в каталоге хранятся файлы, по всей видимости в текстовом представление, в который записаны данные в xml-формате( как то коряво написал, но если не понятно спросите попробую по другому написать) .


Я, конечно, не теоретик, но хоть в чём-то ЦБ нам врать не будет

автор3. Структура наименования, структуры и форматы электронного сообщения

3.1. Электронное сообщение, содержащее информацию о случаях отказа в выполнении распоряжения клиента о совершении операции, случаях отказа от заключения договоров банковского счета (вклада), случаях расторжения договоров банковского счета (вклада) с клиентом (далее - ЭС), предусмотренное Положением Банка России N 550-П, формируется Банком России в виде файла формата XML в кодировке UTF-8 (первая строка файла имеет следующий вид: <?xml version="1.0" encoding="UTF-8"?>, при этом допустимо любое значение регистра при указании кодировки "UTF-8").

Другие системы могут же формировать XML в такой кодировке. Именно эти файлы и списываем мы себе для последующей обработки. И, повторяю, SQL Server прекрасно считывает и разбирает этот файл командами, предназначенными для работы с данными формата xml. Также этот файл сохраняется в поле типа xml (видимо, сервер сам управляется с заголовком).
...
Рейтинг: 0 / 0
Ошибка при формировании XML UTF-8
    #39622596
Гигабайт Мегабайтович Килобайтов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ArkadyLГигабайт Мегабайтович Килобайтовпропущено...

в файле, в текстовом формате записаны данные, которые могут представлены в xml-формате ( а могут быть и не представлены) . xml - это не файл , это формат данных, а вот в чем он храниться - тут возможны варианты ))
у вас по факту - в каталоге хранятся файлы, по всей видимости в текстовом представление, в который записаны данные в xml-формате( как то коряво написал, но если не понятно спросите попробую по другому написать) .


Я, конечно, не теоретик, но хоть в чём-то ЦБ нам врать не будет

автор3. Структура наименования, структуры и форматы электронного сообщения

3.1. Электронное сообщение, содержащее информацию о случаях отказа в выполнении распоряжения клиента о совершении операции, случаях отказа от заключения договоров банковского счета (вклада), случаях расторжения договоров банковского счета (вклада) с клиентом (далее - ЭС), предусмотренное Положением Банка России N 550-П, формируется Банком России в виде файла формата XML в кодировке UTF-8 (первая строка файла имеет следующий вид: <?xml version="1.0" encoding="UTF-8"?>, при этом допустимо любое значение регистра при указании кодировки "UTF-8").

Другие системы могут же формировать XML в такой кодировке. Именно эти файлы и списываем мы себе для последующей обработки. И, повторяю, SQL Server прекрасно считывает и разбирает этот файл командами, предназначенными для работы с данными формата xml. Также этот файл сохраняется в поле типа xml (видимо, сервер сам управляется с заголовком).
таки такое написание принято "фомата xml", хотя правильное написание "формата данных xml" потому что буквально - формата файла типа хмл - нет и не может быть.
а вот в том что "обрабатывает" вы не правы, потому что у вас сначала файл читается в текстовую переменную (тут никакого хмл нет), а потом неявно конвертируется в xml. Правила конвертации из текстового формата в xml определены самими разработчиками sql server'а. а по факту у вас происходит конвертация как раз в формат xml того типа, который может понимать сервер. т.е. у вас получается такая цепочка - текстовый файл с содержимым в формате xml-> текстовая переменная с содержимым в формате xml -> не явная конвертация из типа данных "текст" в тип данных "xml" c одновременной сменой кодировки xml с utf8 на utf16 .

если вы внимательно посмотрите на приведенные вами же примеры по тому, как вы читаете эти файлы вы сами всё это там увидите.
...
Рейтинг: 0 / 0
Ошибка при формировании XML UTF-8
    #39622597
Гигабайт Мегабайтович Килобайтов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ArkadyL,
а вот разработчики ms sql решили поддерживать "внутри" сервера только utf16, ибо он покрывает остальные кодировки, а определение конечной кодировки оставить на стороне клиента, т.е. финальную конвертацию в нужную кодировку должен делать клиент.
...
Рейтинг: 0 / 0
Ошибка при формировании XML UTF-8
    #39622771
blonduser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гигабайт Мегабайтович КилобайтовArkadyL,
а вот разработчики ms sql решили поддерживать "внутри" сервера только utf16, ибо он покрывает остальные кодировки, а определение конечной кодировки оставить на стороне клиента, т.е. финальную конвертацию в нужную кодировку должен делать клиент.

Не правда ваша...
https://docs.microsoft.com/ru-ru/sql/relational-databases/xml/create-instances-of-xml-data
...
Рейтинг: 0 / 0
Ошибка при формировании XML UTF-8
    #39622776
Гигабайт Мегабайтович Килобайтов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
blonduserГигабайт Мегабайтович КилобайтовArkadyL,
а вот разработчики ms sql решили поддерживать "внутри" сервера только utf16, ибо он покрывает остальные кодировки, а определение конечной кодировки оставить на стороне клиента, т.е. финальную конвертацию в нужную кодировку должен делать клиент.

Не правда ваша...
https://docs.microsoft.com/ru-ru/sql/relational-databases/xml/create-instances-of-xml-data
давайте конкретно где я не прав? ))
таки не увидел противоречий ))
...
Рейтинг: 0 / 0
Ошибка при формировании XML UTF-8
    #39622777
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SQL Server внутренне представляет XML в эффективном двоичном представлении, использующем кодировку UTF-16. Пользовательская кодировка не сохранена, но она учитывается в процессе синтаксического анализа.
...
Рейтинг: 0 / 0
Ошибка при формировании XML UTF-8
    #39622778
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SQL Server хранит XML-данные в кодировке Юникод (UTF-16). XML-данные, извлекаемые из баз данных сервера, предоставляются в кодировке UTF-16. Если требуются данные в другой кодировке, извлеченные данные нужно преобразовать.

https://docs.microsoft.com/ru-ru/sql/relational-databases/xml/load-xml-data
...
Рейтинг: 0 / 0
Ошибка при формировании XML UTF-8
    #39622784
blonduser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Konst_One SQL Server хранит XML-данные в кодировке Юникод (UTF-16). XML-данные, извлекаемые из баз данных сервера, предоставляются в кодировке UTF-16. Если требуются данные в другой кодировке, извлеченные данные нужно преобразовать.

https://docs.microsoft.com/ru-ru/sql/relational-databases/xml/load-xml-data

Следующая строка...
"Иногда XML-данные могут быть представлены в другой кодировке." И дальше расписывается пример.
...
Рейтинг: 0 / 0
Ошибка при формировании XML UTF-8
    #39622788
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну так вы дочитайте до конца =)
...
Рейтинг: 0 / 0
Ошибка при формировании XML UTF-8
    #39622792
blonduser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Konst_One,

Вот исходный пример и он отработал без ошибок.

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
DECLARE @c TABLE (xx xml)
DECLARE @var varchar(MAX), @let varchar(10), @xml xml

  SET @let='ГГ'
  SET @var='<?xml version="1.0" encoding="windows-1251"?>'
  SET @var=@var+'<RR>'+CONVERT(nvarchar, @let)+'</RR>'
  
  SET @xml=CAST(@var AS XML) -- тут нет ошибки

  SELECT @var

  INSERT INTO @c (xx) VALUES  (@var) -- тут нет ошибки

  SELECT * FROM @c
...
Рейтинг: 0 / 0
Ошибка при формировании XML UTF-8
    #39622798
Гигабайт Мегабайтович Килобайтов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
blonduserKonst_One SQL Server хранит XML-данные в кодировке Юникод (UTF-16). XML-данные, извлекаемые из баз данных сервера, предоставляются в кодировке UTF-16. Если требуются данные в другой кодировке, извлеченные данные нужно преобразовать.

https://docs.microsoft.com/ru-ru/sql/relational-databases/xml/load-xml-data

Следующая строка...
"Иногда XML-данные могут быть представлены в другой кодировке." И дальше расписывается пример.
а вы контекст этого абзаца не забыли ?)) это уточнение относиться к загружаемым данным , т.е. это данные вне внутреннего формата хранения. таки да вне они могут быть любым форматом. и потом раскрывается как их правильно прочитать, что-бы правильно сохранить.
...
Рейтинг: 0 / 0
Ошибка при формировании XML UTF-8
    #39622800
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
blonduser,

ну и что? к чему этот ваш код?
...
Рейтинг: 0 / 0
Ошибка при формировании XML UTF-8
    #39622802
blonduser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Konst_One,

С этого примера Автор начал свой вопрос.
...
Рейтинг: 0 / 0
Ошибка при формировании XML UTF-8
    #39622804
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
blonduserKonst_One,

С этого примера Автор начал свой вопрос.

видимо вы не поняли вопрос автора и код ваш отличается
...
Рейтинг: 0 / 0
Ошибка при формировании XML UTF-8
    #39622806
Гигабайт Мегабайтович Килобайтов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
blonduserKonst_One,

Вот исходный пример и он отработал без ошибок.

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
DECLARE @c TABLE (xx xml)
DECLARE @var varchar(MAX), @let varchar(10), @xml xml

  SET @let='ГГ'
  SET @var='<?xml version="1.0" encoding="windows-1251"?>'
  SET @var=@var+'<RR>'+CONVERT(nvarchar, @let)+'</RR>'
  
  SET @xml=CAST(@var AS XML) -- тут нет ошибки

  SELECT @var

  INSERT INTO @c (xx) VALUES  (@var) -- тут нет ошибки

  SELECT * FROM @c


выделил ключевой момент вот тут происходит преобразование из varchar в xml.
и сразу два вопроса
1) а почему вы считаете что в переменной @xml у вас не utf-16
2) и где после конвертации у вас находиться
Код: plaintext
<?xml version="1.0" encoding="windows-1251"?>
? ))
...
Рейтинг: 0 / 0
Ошибка при формировании XML UTF-8
    #39622808
Гигабайт Мегабайтович Килобайтов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гигабайт Мегабайтович КилобайтовblonduserKonst_One,

Вот исходный пример и он отработал без ошибок.

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
DECLARE @c TABLE (xx xml)
DECLARE @var varchar(MAX), @let varchar(10), @xml xml

  SET @let='ГГ'
  SET @var='<?xml version="1.0" encoding="windows-1251"?>'
  SET @var=@var+'<RR>'+CONVERT(nvarchar, @let)+'</RR>'
  
  SET @xml=CAST(@var AS XML) -- тут нет ошибки

  SELECT @var

  INSERT INTO @c (xx) VALUES  (@var) -- тут нет ошибки

  SELECT * FROM @c


выделил ключевой момент вот тут происходит преобразование из varchar в xml.
и сразу два вопроса
1) а почему вы считаете что в переменной @xml у вас не utf-16
2) и где после конвертации у вас находиться
Код: plaintext
<?xml version="1.0" encoding="windows-1251"?>
? ))

не выделилось - вот ключевой момент - CAST(@var AS XML)
...
Рейтинг: 0 / 0
Ошибка при формировании XML UTF-8
    #39622814
blonduser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гигабайт Мегабайтович Килобайтов,

Вот цитата автора.

ArkadyLЯ буду благодарен за пример усовершенствования кода.
... Но нас вполне устраивает и хранение в varchar(max). По крайней мере, тестовый ответ тоже был благополучно принят в ЦБ.

Внутри SQL тип XML как юникод.
Но насколько я понял, главная цель была отправить в кодировки UTF-8.
...
Рейтинг: 0 / 0
Ошибка при формировании XML UTF-8
    #39622820
Гигабайт Мегабайтович Килобайтов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
blonduserГигабайт Мегабайтович Килобайтов,

Вот цитата автора.

ArkadyLЯ буду благодарен за пример усовершенствования кода.
... Но нас вполне устраивает и хранение в varchar(max). По крайней мере, тестовый ответ тоже был благополучно принят в ЦБ.

Внутри SQL тип XML как юникод.
Но насколько я понял, главная цель была отправить в кодировки UTF-8.
эт ты куда накопал )) тут сейчас не об этом, с тем он давно уже справился. Но сейчас объясняю как это всё работает "там внутрях", чтоб потом человек когда ему что-то ещё понадобиться делать с хмл, сам понимал что делает.

а то он даже не понимает что происходит, когда у них импортятся файлы в систему.
...
Рейтинг: 0 / 0
21 сообщений из 46, страница 2 из 2
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Ошибка при формировании XML UTF-8
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]