powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Ошибка при формировании XML UTF-8
46 сообщений из 46, показаны все 2 страниц
Ошибка при формировании XML UTF-8
    #39619060
ArkadyL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день!

Требуется сформировать XML в кодировке UTF-8. При этом надо вставлять в файл поля, содержащие кириллические символы.
Покажите, пожалуйста на простом примерчике, как правильно преобразовывать данные, чтобы не получать ошибку типа "Недопустимый символ".

Если переменная @let содержит латинские символы - ошибки нет.

Код: 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(1), @xml xml

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

  SELECT @var

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

  SELECT * FROM @c
...
Рейтинг: 0 / 0
Ошибка при формировании XML UTF-8
    #39619063
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну не умеет он в UTF8, только UTF16
...
Рейтинг: 0 / 0
Ошибка при формировании XML UTF-8
    #39619064
Фотография buser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ArkadyL, выкинуть SET @var=N'<?xml version="1.0" encoding="UTF-8"?>'
...
Рейтинг: 0 / 0
Ошибка при формировании XML UTF-8
    #39619110
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ArkadyLТребуется сформировать XML в кодировке UTF-8

Никак. Только внешними средствами конвертировать ANSI, UTF-16 в UTF-8. Можно SSIS использовать, но если нужен файл с BOM, то придется писать C# скрипт и повозиться с изучением самого SSIS.
...
Рейтинг: 0 / 0
Ошибка при формировании XML UTF-8
    #39619294
ArkadyL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Но файл с такой кодировкой и кириллическими символами я могу принять и обработать.
Вообще-то мне достаточно сохранить его на диск, так что, видимо меня вполне устроит поле varchar(max).
...
Рейтинг: 0 / 0
Ошибка при формировании XML UTF-8
    #39619387
Сон Веры Павловны
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владислав Колосовно если нужен файл с BOM, то придется писать C# скрипт и повозиться с изучением самого SSIS.
Зачем SSIS, если C#? Там дел на 7 строчек кода, и без всякого участия SSIS.
...
Рейтинг: 0 / 0
Ошибка при формировании XML UTF-8
    #39620439
ArkadyL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Скажите, пожалуйста, а если хранить этот UTF-8 XML, в поле varchar(max), кириллические символы в него надо писать обычным образом безо всякой предварительной обработки, чтобы потом принимающая сторона смогла прочитать его?
К нам приходят такие UTF-8 XML и SQL Server понимает в нём кириллицу как ни в чём не бывало.
...
Рейтинг: 0 / 0
Ошибка при формировании XML UTF-8
    #39620483
Гигабайт Мегабайтович Килобайтов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ArkadyLСкажите, пожалуйста, а если хранить этот UTF-8 XML, в поле varchar(max), кириллические символы в него надо писать обычным образом безо всякой предварительной обработки, чтобы потом принимающая сторона смогла прочитать его?
К нам приходят такие UTF-8 XML и SQL Server понимает в нём кириллицу как ни в чём не бывало.
в SQL Server не приходит UTF-8 XML , потому что он его не знает. так что у вас в логике что-то не так.
...
Рейтинг: 0 / 0
Ошибка при формировании XML UTF-8
    #39620525
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ArkadyL,

Вас обманывают, значит, кривым заголовком.
...
Рейтинг: 0 / 0
Ошибка при формировании XML UTF-8
    #39620925
ArkadyL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Возможно, вы слышали о пресловутом постановлении 550-П ЦБ РФ. Они поставляют нам файлы в этой кодировке, а мы должны отправить ответ. Может, и кривой заголовок, но первая строка выглядит, как и в требуемом ответе.
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
4.3.1. Структура и формат уведомления о принятии (непринятии) ЭС.

<?xml version="1.0" encoding="UTF-8"?><!--допустимо любое значение регистра при
                                        указании кодировки "UTF-8"-->
<KVIT>
 <IDNOR></IDNOR>
 <ES></ES>
 <SIZE_ES></SIZE_ES>
 <DATE_ES></DATE_ES>
 <RECNO_ES nRec = "k"><!--количества операций, информация по которым
                        включается в ЭС-->
   <ES_REC IdInfoOR="<gggg>_<kkk>_<ii>_<mmmmmmmmmmmmmmmm>">
            <!--информация о принятии (непринятии) операции, идентификатор,
             которой указан в атрибуте IdInfoOR-->
     <REZ_ES></REZ_ES>
     <ERRORS_ES nRec="n"><!--количество ошибок-->
       <ERR_REC RecId="1"><!--1-й блок характеристики ошибок-->
        <KOD_ERR></KOD_ERR><!--код ошибки-->
        <NAM_ERR></NAM_ERR><!--описание ошибки-->
       </ERR_REC>
        ......................
       <ERR_REC RecId="n"><!--n-й блок характеристики ошибок-->
        <KOD_ERR></KOD_ERR><!--код ошибки-->
        <NAM_ERR></NAM_ERR><!--описание ошибки-->
       </ERR_REC>
      </ERRORS_ES>
   </ES_REC>
 .............................................
 <ES_REC IdInfoOR="<gggg>_<kkk>_<ii>_<mmmmmmmmmmmmmmmm>">
           <!--информация о принятии (непринятии) операции, идентификатор,
            которой указан в атрибуте IdInfoOR-->
   <REZ_ES></REZ_ES>
   <ERRORS_ES nRec="n"><!--количество ошибок-->
     <ERR_REC RecId="1"><!--1-й блок характеристики ошибок-->
      <KOD_ERR></KOD_ERR><!--код ошибки-->
      <NAM_ERR></NAM_ERR><!--описание ошибки-->
     </ERR_REC>
      ...
     <ERR_REC RecId="n"><!--n-й блок характеристики ошибок-->
      <KOD_ERR></KOD_ERR><!--код ошибки-->
      <NAM_ERR></NAM_ERR><!--описание ошибки-->
     </ERR_REC>
   </ERRORS_ES>
  </ES_REC>
 </RECNO_ES>
 <DATE_KVIT></DATE_KVIT>
 <TIME_KVIT></TIME_KVIT>
 <OPER></OPER>
 <TEL_OPER></TEL_OPER>
</KVIT>



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

это - то что вы должны посылать или то, что вам приходит?
...
Рейтинг: 0 / 0
Ошибка при формировании XML UTF-8
    #39620956
ArkadyL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Это ответ.
Код: sql
1.
4.3.1. Структура и формат уведомления о принятии (непринятии) ЭС.
...
Рейтинг: 0 / 0
Ошибка при формировании XML UTF-8
    #39620968
Гигабайт Мегабайтович Килобайтов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ArkadyLЭто ответ.
Код: sql
1.
4.3.1. Структура и формат уведомления о принятии (непринятии) ЭС.


ответ может быть вам а может быть от вас ))
ладно - задам сразу второй вопрос
а как вы посылаете это ответ? )) Ведь сам ms sql не умеет "посылать файлы"
...
Рейтинг: 0 / 0
Ошибка при формировании XML UTF-8
    #39621003
blonduser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ArkadyL,

Скорее всего SET @let='ГГ' - у вас в кодировки windows-1251
Если задать SET @var='<?xml version="1.0" encoding="windows-1251"?>' , то XML формируется.

Более подробно здесь:
https://docs.microsoft.com/ru-ru/sql/relational-databases/xml/create-instances-of-xml-data
...
Рейтинг: 0 / 0
Ошибка при формировании XML UTF-8
    #39621018
ArkadyL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Гигабайт Мегабайтович КилобайтовArkadyLЭто ответ.
Код: sql
1.
4.3.1. Структура и формат уведомления о принятии (непринятии) ЭС.


ответ может быть вам а может быть от вас ))
ладно - задам сразу второй вопрос
а как вы посылаете это ответ? )) Ведь сам ms sql не умеет "посылать файлы"

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

ответ может быть вам а может быть от вас ))
ладно - задам сразу второй вопрос
а как вы посылаете это ответ? )) Ведь сам ms sql не умеет "посылать файлы"

Формируем этот файл как текстовый и загружаем им на сайт. С их сайта и скачиваем.
Когда я из SQL Server просматриваю каталог, куда мы их списываем, и обрабатываю присланные нам файлы, всё происходит безошибочно. А первой строкой там находится UTF-8 и кириллица в файлах присутствует.
как вы можете "я из SQL Server просматриваю каталог, куда мы их списываем, и обрабатываю присланные нам файлы "?
у MS SQL нет возможности просматривать и обрабатывать файлы в каких-то каталогах или таки ms sql 2016 и выше?
...
Рейтинг: 0 / 0
Ошибка при формировании XML UTF-8
    #39621030
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гигабайт Мегабайтович Килобайтов,

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

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

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

таки может обрабатывать файлы ? )) и да - таки и учетки есть права на просмотр любых каталогов? )))
вопрос в том что в принципе не "не может", а в том что автор знает и понимает как это делается у него в системе, а после уже можно будет выяснять как ему помочь ))
ваше невежество утомило
таки утомляйтесь дальше , я не возражаю.
...
Рейтинг: 0 / 0
Ошибка при формировании XML UTF-8
    #39621107
ArkadyL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да, с помощью xp_cmdshell. SQL Server 2008.
Так, вроде, у меня всё работает. Ответные файлы формируем и храним у себя как varchar(max). Приложение затем сохраняет их на диск, и отправляем на сайт.
Но вот в присылаемых нам файлах всё-таки находится UTF-8.
И что-то типа
Код: sql
1.
2.
3.
 
     SET @cSQL='SET @xmldoc=(SELECT * FROM OPENROWSET(BULK N'''+@ES550PFile+''', SINGLE_BLOB) AS Document)'
     EXEC sp_executesql @cSQL, N'@xmldoc varchar(MAX) out', @xmldoc = @xmldoc out


их прекрасно понимает и обрабатывает.
Для меня по незнанию это было неудивительно.
...
Рейтинг: 0 / 0
Ошибка при формировании XML UTF-8
    #39621148
Гигабайт Мегабайтович Килобайтов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ArkadyLДа, с помощью xp_cmdshell. SQL Server 2008.
Так, вроде, у меня всё работает. Ответные файлы формируем и храним у себя как varchar(max). Приложение затем сохраняет их на диск, и отправляем на сайт.
Но вот в присылаемых нам файлах всё-таки находится UTF-8.
И что-то типа
Код: sql
1.
2.
3.
 
     SET @cSQL='SET @xmldoc=(SELECT * FROM OPENROWSET(BULK N'''+@ES550PFile+''', SINGLE_BLOB) AS Document)'
     EXEC sp_executesql @cSQL, N'@xmldoc varchar(MAX) out', @xmldoc = @xmldoc out


их прекрасно понимает и обрабатывает.
Для меня по незнанию это было неудивительно.
а где вы тут видите xml? ))
...
Рейтинг: 0 / 0
Ошибка при формировании XML UTF-8
    #39621149
Гигабайт Мегабайтович Килобайтов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
и да - как вы отправляете файлы?
...
Рейтинг: 0 / 0
Ошибка при формировании XML UTF-8
    #39621200
ArkadyL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
@ES550PFile - в этой переменной имя файла, и он XML, считывается из заданного каталога. А отправляет их собственными руками наш сотрудник из личного кабинета банка.
...
Рейтинг: 0 / 0
Ошибка при формировании XML UTF-8
    #39621225
Гигабайт Мегабайтович Килобайтов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ArkadyL@ES550PFile - в этой переменной имя файла, и он XML, считывается из заданного каталога. А отправляет их собственными руками наш сотрудник из личного кабинета банка.
в файле, в текстовом формате записаны данные, которые могут представлены в xml-формате ( а могут быть и не представлены) . xml - это не файл , это формат данных, а вот в чем он храниться - тут возможны варианты ))
у вас по факту - в каталоге хранятся файлы, по всей видимости в текстовом представление, в который записаны данные в xml-формате( как то коряво написал, но если не понятно спросите попробую по другому написать) .
так вот вы с помощью sp_executesql + OPENROWSET "читаете" эти файлы в автортекстовую переменную авторN'@xmldoc varchar(MAX) out' и в этом процессе нигде не присутствует работа с xml как с типом данных/
вот пример
1)
автор declare @n varchar(max)='<a>a</a>
это работа с xml или нет? ))

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


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