powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Ошибка при формировании XML UTF-8
25 сообщений из 46, страница 1 из 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
25 сообщений из 46, страница 1 из 2
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Ошибка при формировании XML UTF-8
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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