|  26.02.2007, 10:32 | #1 | 
| Участник | Инструкция encoding в XML, сформированным XMLDocument 
			
			Добрый день. Столкнулся с проблемой: Нужно сформировать XML файл. Пользуюсь классом XMLDocument, создание производится следующим кодом: X++: #define.instruct('xml') #define.dataInstruct('version="1.0" encoding="Windows-1251"') private XMLDocument createXMLDocument() { COM dom = XMLDocument::XMLDOM(); XMLDocument xmlDocument = xmlNode::construct(dom); XMLProcessingInstruction instruction; ; instruction = xmlDocument.createProcessingInstruction(#instruct, #dataInstruct); xmlDocument.appendChild(instruction); return xmlDocument; } Проблема в том, что в результате теряется инструкция препроцессору encoding="Windows-1251. Вместо ожидаемого Код: <?xml version="1.0" encoding="windows-1251" ?> Код: <?xml version="1.0"?> | 
|  | 
|  26.02.2007, 11:58 | #2 | 
| Banned | 
			
			Было такое. Кажется, это проблема даже не с Аксаптой, а с DOM, причем зависит от версии MSXML. Помогло только тупое редактирование результата как строки в самый последний момент.
		 | 
|  | 
|  26.02.2007, 12:03 | #3 | 
| Участник | 
			
			Так как метод xml возвращает BSTR (юникодную строку) - у него не может быть никакой кодировки кроме UTF-16. Если вам надо что-то другое - используйте, например, ADODB.Stream для вывода в поток байтов (погуглив, можно получить пример) или Save для вывода в файл. А что вы собственно хотите делать с этой строкой в дальнейшем? | 
|  | 
|  26.02.2007, 12:22 | #4 | 
| Banned | 
			
			Правильный комментарий написал г-н Белугин. Вывести "encoding="windows-1251" в заголовок - это одно, а создать файл в заданной кодировке - это другое. Я писал об этом на форуме. Из Аксапты 3.0 стаднартными средствами даже UTF-16 создать невозможно. Как раз с windows-1251 все будет в порядке, поскольку это - "родная" кодировка русской Аксапты.
		 | 
|  | |
| За это сообщение автора поблагодарили: Raven Melancholic (1). | |
|  26.02.2007, 12:42 | #5 | 
| Участник | 
			
			Он будет фактически 1251 а по заголовку UTF-16 - так как XMLDocument отдает именно UTF-16, а потом аксапта3 перекодирует в 1251 (правда в четверке скорее всего unicode - но я не проверял)
		 | 
|  | |
| За это сообщение автора поблагодарили: Raven Melancholic (1). | |
|  26.02.2007, 13:10 | #6 | 
| Banned | |
|  | 
|  26.02.2007, 14:43 | #7 | 
| Участник | 
			
			Спасибо всем. Действительно, кодировка получается именно Windows-1251, простое проставление в готовом файле нужной инструкции это подтверждает - файл обрабатывается нормально, все русские символы отображаются. Просто та программулина, которая в дальнейшем обрабатывает файл русские символы без этой инструкции обрабатывать не хочет. Так что буду просто втупую подставлять в уже готовый текст эту инструкци.. | 
|  | 
|  26.02.2007, 22:22 | #8 | 
| Участник | 
			
			Вопрос: если нужен файл, почему бы не использовать метод save
		 | 
|  | 
|  27.02.2007, 09:29 | #9 | 
| Участник | 
			
			Нужен не только файл, но и возможность получать результат через бизнес-коннектор. А что при сохранении можно как-то регулировать сохранение этой инструкции? Если же можно еще и перекодировать в UTF-16 при сохранении в файл, то вообще будет кучеряво - тогда на бизнес-коннектор просто наложим крест. | 
|  | 
|  27.02.2007, 13:41 | #11 | 
| Участник | 
			
			Ух ты, работает! Огромный респект!
		 | 
|  | 
|  | 
| 
 |