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 |
Участник
|
Ух ты, работает! Огромный респект!
|
|
|
|