Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 FOR XML PATH и UTF-8  [new]
r77
Member

Откуда: Краснодар
Сообщений: 270
Добрый день.

Помогите, пожалуйста. Раньше выгружал XML с кодировкой "windows-1251", далаю так:

DECLARE @dxml nvarchar(max) 

SELECT @dxml= N'<?xml version="1.0" encoding="windows-1251"?>'+Convert(nvarchar(max),
(SELECT
...
)
for xml path('123')

и помещаю в таблицу в поле типа nvarchar(max)

теперь необходимо сменить кодировку на UTF-8, делаю точно также:

DECLARE @dxml nvarchar(max) 

SELECT @dxml= N'<?xml version="1.0" encoding="UTF-8"?>'+Convert(nvarchar(max),
(SELECT
...
)
for xml path('123')


но, после открытия xml файла все символы кириллицы отображаются квадратами,что делаю не так?
21 июл 15, 10:23    [17915752]     Ответить | Цитировать Сообщить модератору
 Re: FOR XML PATH и UTF-8  [new]
AlanDenton
Member [скрыт]

Откуда:
Сообщений: 1004
Насколько мне известно, на SQL Server UTF-8 нету... весь юникод - это UTF-16
21 июл 15, 10:35    [17915829]     Ответить | Цитировать Сообщить модератору
 Re: FOR XML PATH и UTF-8  [new]
r77
Member

Откуда: Краснодар
Сообщений: 270
AlanDenton,

и что делать? мне по регламенту нужно файл выгружать в кодировке UTF-8, базы все в SQL.
21 июл 15, 10:37    [17915844]     Ответить | Цитировать Сообщить модератору
 Re: FOR XML PATH и UTF-8  [new]
r77
Member

Откуда: Краснодар
Сообщений: 270
r77,

А вот еще в поле в таблицу пишется корректный полностью XML, после saveToFile в программе - открывается только блокнотом нормально, все остальные программы выдают ошибки...
21 июл 15, 10:41    [17915870]     Ответить | Цитировать Сообщить модератору
 Re: FOR XML PATH и UTF-8  [new]
invm
Member

Откуда: Москва
Сообщений: 9825
r77
и что делать?
Можно:
1. Застрелиться.
2. Организовать всемирные акции протеста с требованием к MS обеспечить таки поддержку UTF-8 в SQL Server.
3. Перекодировать строку в UTF-8 самостоятельно.

ЗЫ: Вы всерьез полагаете, что приляпав к строке заголовок XML, тем самым меняете ее кодировку?
21 июл 15, 10:46    [17915905]     Ответить | Цитировать Сообщить модератору
 Re: FOR XML PATH и UTF-8  [new]
r77
Member

Откуда: Краснодар
Сообщений: 270
invm,

3. Перекодировать строку в UTF-8 самостоятельно.

буду очень благодарен если подскажите,каким образом? (иначе бы не задавал вопрос)
21 июл 15, 10:49    [17915918]     Ответить | Цитировать Сообщить модератору
 Re: FOR XML PATH и UTF-8  [new]
invm
Member

Откуда: Москва
Сообщений: 9825
r77
буду очень благодарен если подскажите,каким образом?
Написать свой конвертер.
Или найти какой-нибудь готовый. Например - https://technet.microsoft.com/en-us/library/ms160893(v=sql.90).aspx
Или заниматься конвертацией на клиенте.
21 июл 15, 11:02    [17915993]     Ответить | Цитировать Сообщить модератору
 Re: FOR XML PATH и UTF-8  [new]
r77
Member

Откуда: Краснодар
Сообщений: 270
Может кому-то будет полезно...

Мне проще всего было сделать конвертацию на клиенте (Delphi)...

Через потоки

        bst :=TStringStream.Create(UTF8Encode(QXMLOut1.Fieldbyname('XMLFile').AsString));
        fst :=TMemoryStream.Create;
        fst.Seek(0, soFromBeginning);
        bst.Seek(0, soFromBeginning);
        fst.CopyFrom(bst,bst.Size);
        fst.SaveToFile('c:\1.xml');
        bst.Free;
        fst.Free;
21 июл 15, 11:55    [17916303]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить