Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Сохранение XML в файл / 15 сообщений из 15, страница 1 из 1
22.08.2018, 16:06
    #39691889
r77
r77
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сохранение XML в файл
Добрый день.

Помогите разобраться. Текст XML файла хранится в БД (SQL) в поле nvarchar. В тексте есть формула вида: Mt = √(0.07² + 0.07²)=0.10, в SQL отображается нормально, но при сохранении файла на диск формула приобретает следующий вид: Mt = v(0.07? + 0.07?)=0.10, кодировка xml UTF-8. При чем если взять и вставить формулу вручную уже в готовый файл, то она вставится корректно.

Сохранение файла:
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
 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(pt+'\123.xml');
 bst.Free;
 fst.Free;
...
Рейтинг: 0 / 0
22.08.2018, 16:42
    #39691920
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сохранение XML в файл
r77Сохранение файла

Из этого процесса следует исключить оба Stream.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
22.08.2018, 16:59
    #39691935
NetObserver
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сохранение XML в файл
r77,

1)В базе данных, текст хранится в UTF-16.
2)Ты его преобразуешь в строку Delphi - AsString.
3)Затем в строку UTF-8.
4)Затем пишешь в TStringStream.
5)Затем пишешь в TMemoryStream.
6)Потом уже в файл.

Вопрос, какая версия Delphi?
Если не unicode, то ошибка в пункте 2.
...
Рейтинг: 0 / 0
22.08.2018, 17:21
    #39691950
r77
r77
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сохранение XML в файл
Dimitry Sibiryakov,

Код: pascal
1.
(QXMLOut1.Fieldbyname('XMLFile') as TBlobField).SaveToFile(pt+'\123.xml');



тот же результат, может еще есть какой-то вариант?
...
Рейтинг: 0 / 0
22.08.2018, 17:22
    #39691951
r77
r77
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сохранение XML в файл
NetObserver,

7
...
Рейтинг: 0 / 0
22.08.2018, 17:24
    #39691953
r77
r77
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сохранение XML в файл
NetObserver,

подскажите как сделать правильно, буду очень признательна, спасибо
...
Рейтинг: 0 / 0
22.08.2018, 17:44
    #39691967
r77
r77
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сохранение XML в файл
спасибо натолкнули на мысль...

Код: sql
1.
select replace('Mt = √(0.07² + 0.07²)=0.10','utf-16', 'utf-8')


дало результат Mt = v(0.07? + 0.07?)=0.10

получается UTF8 не поддерживает эти символы? как же тогда я могу вставить их просто в текст файла и все нормально?
...
Рейтинг: 0 / 0
22.08.2018, 17:54
    #39691973
NetObserver
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сохранение XML в файл
r77,

Вариантов много
1)Читать из поля как из BLOB, стримом и сразу сохранять в файл.
2)Читать из поля через AsVariant,
UTF8Encode(QXMLOut1.Fieldbyname('XMLFile').AsVariant)
3)Сконвертить на стороне сервера NVarchar к UTF-8 и тогда AsString не будет ничего ломать
...
Рейтинг: 0 / 0
22.08.2018, 17:58
    #39691976
r77
r77
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сохранение XML в файл
NetObserverr77,

Вариантов много
1)Читать из поля как из BLOB, стримом и сразу сохранять в файл.
2)Читать из поля через AsVariant,
UTF8Encode(QXMLOut1.Fieldbyname('XMLFile').AsVariant)
3)Сконвертить на стороне сервера NVarchar к UTF-8 и тогда AsString не будет ничего ломать

первые 2 варианта были опробованы до моего поста тут и не дали результатов
1) я выше написала
Код: pascal
1.
(QXMLOut1.Fieldbyname('XMLFile') as TBlobField).SaveToFile(pt+'\123.xml');


не помогло
2) AsVariant - результат тот же, вообще ничего не изменилось
...
Рейтинг: 0 / 0
22.08.2018, 18:14
    #39691980
NetObserver
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сохранение XML в файл
r77,

(QXMLOut1.Fieldbyname('XMLFile') as TBlobField).SaveToFile(pt+'\123.xml');
наколько я помню поле XMLFile на стороне сервера нужно привести к VARBINARY(MAX)
...
Рейтинг: 0 / 0
22.08.2018, 18:59
    #39691999
Barlone
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сохранение XML в файл
А TField.AsWideString в Delphi 7 не завезли?
...
Рейтинг: 0 / 0
22.08.2018, 19:06
    #39692003
Barlone
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сохранение XML в файл
А TField.AsWideString в Delphi 7 не завезли?
...
Рейтинг: 0 / 0
23.08.2018, 11:10
    #39692259
r77
r77
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сохранение XML в файл
NetObserverr77,

(QXMLOut1.Fieldbyname('XMLFile') as TBlobField).SaveToFile(pt+'\123.xml');
наколько я помню поле XMLFile на стороне сервера нужно привести к VARBINARY(MAX)

конвертация из nvarchar в varbinary(max) получилось на выходе вообще иероглифы типа: Mt = √(0.07蛐 ⬀  ⸀ 㜀퀀†)=0.10
но теперь уже не только в формуле ... и в другом тексте местами
...
Рейтинг: 0 / 0
23.08.2018, 11:35
    #39692279
r77
r77
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сохранение XML в файл
NetObserverr77,

(QXMLOut1.Fieldbyname('XMLFile') as TBlobField).SaveToFile(pt+'\123.xml');
наколько я помню поле XMLFile на стороне сервера нужно привести к VARBINARY(MAX)

из xml в varbinary(max) - тоже иероглифы
...
Рейтинг: 0 / 0
23.08.2018, 12:07
    #39692314
r77
r77
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сохранение XML в файл
NetObserverr77,

(QXMLOut1.Fieldbyname('XMLFile') as TBlobField).SaveToFile(pt+'\123.xml');
наколько я помню поле XMLFile на стороне сервера нужно привести к VARBINARY(MAX)

Прошу прощения...все получилось (в трех соснах заблудилась -не в том месте исправляла)! спасибо Вам большое! и всем большое спасибо!
...
Рейтинг: 0 / 0
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Сохранение XML в файл / 15 сообщений из 15, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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