Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Ошибка при формировании XML UTF-8 / 25 сообщений из 46, страница 1 из 2
22.03.2018, 17:21
    #39619060
ArkadyL
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка при формировании XML UTF-8
Добрый день!

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

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

Вас обманывают, значит, кривым заголовком.
...
Рейтинг: 0 / 0
27.03.2018, 09:56
    #39620925
ArkadyL
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка при формировании XML UTF-8
Возможно, вы слышали о пресловутом постановлении 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
27.03.2018, 10:04
    #39620933
Гигабайт Мегабайтович Килобайтов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка при формировании XML UTF-8
ArkadyL,

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


ответ может быть вам а может быть от вас ))
ладно - задам сразу второй вопрос
а как вы посылаете это ответ? )) Ведь сам ms sql не умеет "посылать файлы"
...
Рейтинг: 0 / 0
27.03.2018, 11:13
    #39621003
blonduser
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка при формировании XML UTF-8
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
27.03.2018, 11:33
    #39621018
ArkadyL
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка при формировании XML UTF-8
Гигабайт Мегабайтович КилобайтовArkadyLЭто ответ.
Код: sql
1.
4.3.1. Структура и формат уведомления о принятии (непринятии) ЭС.


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

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

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

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

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

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

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

таки может обрабатывать файлы ? )) и да - таки и учетки есть права на просмотр любых каталогов? )))
вопрос в том что в принципе не "не может", а в том что автор знает и понимает как это делается у него в системе, а после уже можно будет выяснять как ему помочь ))
ваше невежество утомило
таки утомляйтесь дальше , я не возражаю.
...
Рейтинг: 0 / 0
27.03.2018, 12:46
    #39621107
ArkadyL
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка при формировании XML UTF-8
Да, с помощью 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
27.03.2018, 13:25
    #39621148
Гигабайт Мегабайтович Килобайтов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка при формировании XML UTF-8
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
27.03.2018, 13:26
    #39621149
Гигабайт Мегабайтович Килобайтов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка при формировании XML UTF-8
и да - как вы отправляете файлы?
...
Рейтинг: 0 / 0
27.03.2018, 14:16
    #39621200
ArkadyL
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка при формировании XML UTF-8
@ES550PFile - в этой переменной имя файла, и он XML, считывается из заданного каталога. А отправляет их собственными руками наш сотрудник из личного кабинета банка.
...
Рейтинг: 0 / 0
27.03.2018, 14:38
    #39621225
Гигабайт Мегабайтович Килобайтов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка при формировании XML UTF-8
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
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Ошибка при формировании XML UTF-8 / 25 сообщений из 46, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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