| 
			
			 | 
		#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"?>  | 
| 
	
 | 
| 
			
			 | 
		#2 | 
| 
			
			 Banned 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Было такое. Кажется, это проблема даже не с Аксаптой, а с DOM, причем зависит от версии MSXML. Помогло только тупое редактирование результата как строки в самый последний момент.
		 
		
		
		
		
		
		
		
	 | 
| 
	
 | 
| 
			
			 | 
		#3 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Так как метод xml возвращает BSTR (юникодную строку) - у него не может быть никакой кодировки кроме UTF-16. Если вам надо что-то другое - используйте, например, ADODB.Stream для вывода в поток байтов (погуглив, можно получить пример) или Save для вывода в файл. 
		
		
		
		
		
		
		
	А что вы собственно хотите делать с этой строкой в дальнейшем?  | 
| 
	
 | 
| 
			
			 | 
		#4 | 
| 
			
			 Banned 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Правильный комментарий написал г-н Белугин. Вывести "encoding="windows-1251" в заголовок - это одно, а создать файл в заданной кодировке - это другое. Я писал об этом на форуме. Из Аксапты 3.0 стаднартными средствами даже UTF-16 создать невозможно. Как раз с windows-1251 все будет в порядке, поскольку это - "родная" кодировка русской Аксапты.
		 
		
		
		
		
		
		
		
	 | 
| 
	
 | 
|
| За это сообщение автора поблагодарили: Raven Melancholic (1). | |
| 
			
			 | 
		#5 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Он будет фактически 1251 а по заголовку UTF-16 - так как XMLDocument отдает именно UTF-16, а потом аксапта3 перекодирует в 1251 (правда в четверке скорее всего unicode - но я не проверял)
		 
		
		
		
		
		
		
		
	 | 
| 
	
 | 
|
| За это сообщение автора поблагодарили: Raven Melancholic (1). | |
| 
			
			 | 
		#6 | 
| 
			
			 Banned 
		
			
	 | 
	
	|
| 
	
 | 
| 
			
			 | 
		#7 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Спасибо всем. 
		
		
		
		
		
		
		
	Действительно, кодировка получается именно Windows-1251, простое проставление в готовом файле нужной инструкции это подтверждает - файл обрабатывается нормально, все русские символы отображаются. Просто та программулина, которая в дальнейшем обрабатывает файл русские символы без этой инструкции обрабатывать не хочет. Так что буду просто втупую подставлять в уже готовый текст эту инструкци..  | 
| 
	
 | 
| 
			
			 | 
		#8 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Вопрос: если нужен файл, почему бы не использовать метод save
		 
		
		
		
		
		
		
		
	 | 
| 
	
 | 
| 
			
			 | 
		#9 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Нужен не только файл, но и возможность получать результат через бизнес-коннектор. 
		
		
		
		
		
		
		
	А что при сохранении можно как-то регулировать сохранение этой инструкции? Если же можно еще и перекодировать в UTF-16 при сохранении в файл, то вообще будет кучеряво - тогда на бизнес-коннектор просто наложим крест.  | 
| 
	
 | 
| 
			
			 | 
		#11 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Ух ты, работает! Огромный респект!
		 
		
		
		
		
		
		
		
	 | 
| 
	
 | 
| 
	
	 | 
	
		
  |