powered by simpleCommunicator - 2.0.37     © 2025 Programmizd 02
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / кодировка
7 сообщений из 7, страница 1 из 1
кодировка
    #39520204
Фотография HandKot
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день.
Только начал работать с Cache, поэтому сильно не пинайте.
Пишем web-service.
Задача - метод должен возвращать xml-класса в кодировке windows 1251

что сделано:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
set writer = ##class(%XML.Writer).%New()
	
//устанавливаем отступы
set writer.Indent = 1
	
//указываем что писать будем в поток
set xml = ##class(%Stream.TmpCharacter).%New()
do writer.OutputToStream(.xml)
	
//указываем себя, как объект для сериализации
do writer.RootObject($THIS)



если потом посмотреть результат в окне отладчика или вывести в файл, то все хорошо

Код: sql
1.
2.
3.
4.
set f = ##class(%FileCharacterStream).%New()
set f.Filename = "c:\мойфайл.xml"
set f.TranslateTable = "cp1251"
set status = f.CopyFromAndSave(xml)



но проблема в том, что получаемый XML не соответствует необходимому виду
чтобы привести к требуемому виду, делаем XSLT преобразование

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
set streamxslt = ##class(%Stream.TmpCharacter).%New()
do streamxslt.Write(xslt)

//создаём объект стиля трансформации
Set status=##class(%XML.XSLT.CompiledStyleSheet).CreateFromStream(streamxslt,.pXSL)
	
//создаем объект трансформации и производим её
set Transformer = ##class(%XML.XSLT.Transformer).%New()
set status = Transformer.TransformStreamWithCompiledXSL(xml, pXSL, .resultxml, , , , )



и вот после этого и в файл пишутся "кракозябры" и метод сервиса возвращает "кракозябры"
В окне отладчика все нормально.
Кстати, как лучше поток перевести в строку?

кодировщик показывает, что текст "кракозябров" - это текст в кодировке windows1251 приведенный в utf8

Что можете посоветовать?

I Have Nine Lives You Have One Only
THINK!
...
Рейтинг: 0 / 0
кодировка
    #39520483
vassil
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте!
Сообщите версию Cache
...
Рейтинг: 0 / 0
кодировка
    #39520618
Фотография П.С.М.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
HandKot,

Попробуйте resultxml определить заранее, и установить у него нужную кодировку
...
Рейтинг: 0 / 0
кодировка
    #39520837
Фотография HandKot
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
П.С.М.HandKot,

Попробуйте resultxml определить заранее, и установить у него нужную кодировку
пробовал не получалось
а как у стрима установить нужную кодировку?

пока нашел такое решение
Код: sql
1.
2.
set result = resultxml.Read(resultxml.Size)
quit $ZCONVERT(result, "I", "UTF8")


в итоге веб сервис возвращает данные в нужной кодировке

vassil Здравствуйте!
Сообщите версию Cache
Код: plaintext
Cache for Windows (x86-64) 2017.1.1 (Build 111) Wed May 17 2017 15:55:41 EDT
...
Рейтинг: 0 / 0
кодировка
    #39522140
vassil
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
HandKotпока нашел такое решение
Код: sql
1.
2.
set result = resultxml.Read(resultxml.Size)
quit $ZCONVERT(result, "I", "UTF8")



Я тоже так делаю ))
...
Рейтинг: 0 / 0
кодировка
    #39523468
doublefint
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
HandKot,

set streamxslt = ##class(%Stream.TmpCharacter).%New()
#; s streamxslt.TranslateTable = "UTF8" ???
do streamxslt.Write(xslt)
...
Рейтинг: 0 / 0
кодировка
    #39524259
Фотография HandKot
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
doublefint, у %Stream.TmpCharacter нет св-ва TranslateTable
Его я нашел только у %FileCharacterStream
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / кодировка
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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