Имя: Пароль:
1C
1С v8
Раскодировать значение из ЧтениеXML
,
0 Boudybuilder
 
08.04.19
08:40
Здравствуйте!

Разбираем XML файл при помощи ЧтениеXML. Но так как текст внутри тега на Азербайджанском, то он закодирован.
Вот пример: "<c2>&#199;&#305;nq&#305;l (Yuyulmu&#351;)</c2>"

А получить хотелось бы так: "<c2>Çınqıl (Yuyulmuş)</c2>"

Подскажите как быть? Платформа 8.3
1 Мыш
 
08.04.19
08:52
Найти все &# и менять на символы
2 Boudybuilder
 
08.04.19
08:58
Спасибо, но каким образом?
3 Кирпич
 
08.04.19
09:02
(2) покажите это программисту и дайте ему денег. он всё сделает как надо
4 СвинТуз
 
08.04.19
09:06
(0)
Что то у вас с кодовой страницей надо смотреть как правильно сделать
5 СвинТуз
 
08.04.19
09:09
ЧтениеXML (XMLReader)
КодировкаXML (XMLEncoding)
Использование:
Тип: Строка.
Кодировка исходного документа XML.
Содержит значение атрибута encoding объявления XML.
Если атрибут не указан или объявление не прочитано (отсутствует), то будет возвращена кодировка UTF8.

Примечание:
Поддерживаемые коды кодировок (с учетом правил http://www.w3.org/TR/2004/REC-xml-20040204/#NT-EncName):
6 Boudybuilder
 
08.04.19
09:10
(4) Спасибо. Вот файл: https://yadi.sk/d/ZTBLCKzc7RmLlw может что то подскажете?
7 Boudybuilder
 
08.04.19
09:12
(5) Вот такое отображает отладчик: https://yadi.sk/i/pLBy2MUkl70JWQ
8 СвинТуз
 
08.04.19
09:12
9 СвинТуз
 
08.04.19
09:12
Работайте сами )))
10 СвинТуз
 
08.04.19
09:14
У Вас вроде как я понял будет проблема с одной буквой если сделать все правильно.
11 Кирпич
 
08.04.19
09:18
билиберда &#199;&#305;nq&#305;
это HTML
нужно тупо заменить &#199; на Символ(199) и т.д.
12 Кирпич
 
08.04.19
09:20
ну и наорать на тех, кто делает такие xml
13 Boudybuilder
 
08.04.19
09:20
Ну хоть подскажите что нужно делать. Как менять эти символы?
14 quest
 
08.04.19
09:26
(12) +100500
15 Кирпич
 
08.04.19
09:27
(13) Ну как... Открываешь текст и проверяешь каждый символ, если символ не &, то пишешь символ в выходной файл. Если символ это & и за ним идет # и цифры, читаешь цифры, и пишешь в выходной поток Символ(<цифры>)
16 NorthWind
 
08.04.19
09:58
(0) если взять виндовую таблицу символов и калькулятор, то видно, что нужные символы заданы в кодировке UTF-16 (little endian). Т.е. 305 = 0x131 = 'ı', 199 = 0xC7 = 'Ç'. А в разделе Encoding указана UTF-8. То есть тут некоторые непонятки по форматированию XML.
17 NorthWind
 
08.04.19
10:08
Чтобы получить из этого корректный XML, надо сделать следующее.
1. Поменять кодировку на UTF-16 и соответствующим образом перекодировать XML (из однобайтовой кодировки в двухбайтовую).
В простейшем случае это можно сделать, например, встроенным редактором фар-менеджера.
2. Исправить основной косяк данного файла - заменить &amp;# на &#
Собственно, именно из-за этого проблема в отображении - криво записанные литералы.
После этого файл отображается верно. Вот вам файло исправленное - https://drive.google.com/open?id=16HT2ql-sTLl0OOCXsVPYzDVa0x5WUK6T
18 Кирпич
 
08.04.19
10:14
&НаКлиенте
Функция ПреобразоватьБилиберду(Текст)
    вт = "";
    Длина = СтрДлина(Текст);
    а = 1;
    Пока (а <= Длина)  Цикл
        Симв = Сред(Текст,а,1);
        Если Симв <> "&" Тогда
            вт = вт + Симв;
        Иначе
            Если Сред(Текст,а+1,1) = "#" Тогда
                а = а + 2;
                Симв = Сред(Текст,а,1);
                Ч = "";
                Пока (Симв <> ";") цикл
                    Ч = Ч + Симв;
                    а = а + 1;
                    Симв = Сред(Текст,а,1);                            
                КонецЦикла;    
                Ч = Число(Ч);
                вт = вт + Символ(Ч);
            Иначе
                вт = вт + Симв;
            КонецЕсли;
        КонецЕсли;
        а = а + 1;
    КонецЦикла;
    Возврат вт;
КонецФункции


&НаКлиенте
Процедура Команда1(Команда)
    // Вставить содержимое обработчика.
    Сообщить(ПреобразоватьБилиберду("Qum-&#199;&#305;nq&#305;l sat&#305;&#351;&#305;"));    
    Сообщить(ПреобразоватьБилиберду("&#199;&#305;nq&#305;l (Yuyulmu&#351;)"));    
КонецПроцедуры
19 Fram
 
08.04.19
10:14
(0) офф: а почему boUdy?
20 NorthWind
 
08.04.19
10:14
(11) литералы, записанные как &#, работают и в XML. В данном случае проблема в том, что там не &#, a &amp;#
21 Boudybuilder
 
08.04.19
21:13
(18) Спасибо большое!
Эта функция очень мне помогла! Это именно то что надо.

(19) Это от прозвища пошло. Боуди. А так как я спортсмен то называли друзья - БоудиБилдер ;)