Имя: Пароль:
1C
 
Кодировка XML
0 Air777
 
12.11.08
16:21
Как выгрузить данные в XML в кодировке отличной от UTF-8 например Windows-1251.

Парметр КодировкаXML - только для чтения! Особенно убивает абсурд

ЗаписьХМЛ=Новый ЗаписьXML()
ЗаписьХМЛ.Параметры.Кодировка - тоже только для чтения.

Хочу подружить выгрузку из 8.1 и 7.7 подскажите обходные пути если они есть. Забавно что из 7.7 выгрузить можно в любой кодировке, а вот прочитать нет. В 8.1 наоборот.

И кто писал эти функции???
1 KalachevDV
 
12.11.08
16:24
(0) Новый ПараметрыЗаписиXML(<Кодировка>, <Версия>, <Отступ>, <Отступ атрибутов>, <Символы отступа>)
2 wPa
 
12.11.08
16:25
(0) родной формат xml не поддерживает 1251. делал так

ТекстXML = Новый ТекстовыйДокумент();
   Попытка
       ТекстXML.Прочитать(ИмяФайла,КодировкаТекста.UTF8);
   Исключение
       Сообщить("Не удалось открыть файл");
   КонецПопытки;
   
   ТекстXML.ЗаменитьСтроку(1,"<?xml version=""1.0"" encoding=""windows-1251""?>");
   ТекстXML.УстановитьТипФайла(КодировкаТекста.ANSI);
   ИмяФайлаТхт=Сред(ИмяФайла,1,СтрДлина(ИмяФайла)-4);
   ТекстXML.Записать(ИмяФайлаТхт+".txt",КодировкаТекста.ANSI);
3 wPa
 
12.11.08
16:26
(2) ну только расширение не тхт у тебя
4 Air777
 
12.11.08
16:28
(1) из синтаксис-помошника:
------------------------------
ПараметрыЗаписиXML.Кодировка (XMLWriterSettings.Encoding)
ПараметрыЗаписиXML (XMLWriterSettings)
Кодировка (Encoding)
Использование:
Только чтение. (!!!!!)
Описание:
Тип: Строка. Кодировка, используемая при записи XML (имеет смысл при записи в файл).
5 KalachevDV
 
12.11.08
16:28
ЗаписьXML (XMLWriter)
ОткрытьФайл (OpenFile)
Вариант синтаксиса: По имени и типу кодировки
Описание:
Открывает файл для записи XML. Позволяет указать тип кодировки, который будет использован для записи файла XML.

И 1251 в том числе...
6 wPa
 
12.11.08
16:31
(5) не работает
7 wPa
 
12.11.08
16:32
(6) повторюсь. формат xml поддруживает только утф-8 и утф-16
8 KalachevDV
 
12.11.08
16:33
(7) Что ж они (СП 1С) тогда вводят в заблуждение?
9 Air777
 
12.11.08
16:37
(5-7) у меня реально записало в 1251 это потверждается открытием этого файла в опенофисе с принудительным указанием кодировки 1251 однако 7.7 его почему так с крокозяблами и читает
10 Air777
 
12.11.08
16:38
не понимаю что нужно указать чтобы эту выгрузку нормально прочитала 7.7
11 wPa
 
12.11.08
16:41
вот в спецификации сказано.

4.3.3 Character Encoding in Entities
Each external parsed entity in an XML document MAY use a different encoding for its characters. All XML processors MUST be able to read entities in both the UTF-8 and UTF-16 encodings. The terms "UTF-8" and "UTF-16" in this specification do not apply to character encodings with any other labels, even if the encodings or labels are very similar to UTF-8 or UTF-16.

Я не знаю - бился долго. Может у кого получилось? - у меня только так - (2)
12 KalachevDV
 
12.11.08
16:45
(11) Попробовал...

ЗаписьXML = Новый ЗаписьXML();
Параметры = Новый ПараметрыЗаписиXML("cp866", "1.1", Истина, Истина);
ЗаписьXML.ОткрытьФайл("D:\data.xml", Параметры);
ЗаписьXML.ЗаписатьОбъявлениеXML();
ЗаписьXML.Закрыть();

Создал файл. В файле <?xml version="1.1" encoding="cp866"?>

... если указываешь 1251 ругается...
13 KalachevDV
 
12.11.08
16:48
(12) А если указать кодировку "windows1251" (т.е без дефиса), то тоже проглатывает...

<?xml version="1.1" encoding="windows1251"?>
14 Air777
 
12.11.08
16:49
а вот это вообще за пределами моего понимания: на англоязычном серванте с муи загрузка-выгрузка идет на ура в любой кодировке! А вот с англоязычной на рускоязычную ХР сабж. :(
15 wPa
 
12.11.08
16:55
(13) Так что работает? Открывается xml?
16 KalachevDV
 
12.11.08
17:02
(15) не пробовал открывать...
Вот попробовал под win2003 английским с указанием кодировки именно "windows-1251"...
Результат - <?xml version="1.1" encoding="windows-1251"?>.

Щас попробую сформировать чтонить простенькое и открыть...
17 wPa
 
12.11.08
17:05
открой в IE каком нидь )
18 KalachevDV
 
12.11.08
17:08
(17) сформировал вот такой файлик

<?xml version="1.0" encoding="windows-1251"?>
<Проверка>
   <Работает/>
</Проверка>

IE открыл... я думал ты спрашивал, открывает ли его 7.7
19 KalachevDV
 
12.11.08
17:12
(17) а вот 7.7 под рукой нет... Проверить не могу, мож Air777 попробует...

Кстати, файл формировался под win2003 английским. Открывался в нем же и в Vista русской... Под вистой обработка по формированию файла вылетает с ошибкой - "Неверная кодировка"
20 KalachevDV
 
12.11.08
17:27
+(19) В общем итого, мож кому пригодиться... Следующий код формирует файл xml в кодировке "windows-1251". IE его корректно открывает. Что в Висте что в 2003 сервере.
   
ЗаписьXML = Новый ЗаписьXML();
   Параметры = Новый ПараметрыЗаписиXML("windows-1251", "1.0", Истина, Истина);
   ЗаписьXML.ОткрытьФайл("D:\data.xml", Параметры);
   ЗаписьXML.ЗаписатьОбъявлениеXML();
   ЗаписьXML.ЗаписатьНачалоЭлемента("Проверка");
   ЗаписьXML.ЗаписатьНачалоЭлемента("Работает");
   ЗаписьXML.ЗаписатьКонецЭлемента();
   ЗаписьXML.ЗаписатьКонецЭлемента();
   ЗаписьXML.Закрыть();
Компьютеры — прекрасное средство для решения проблем, которых до их появления не было.