Имя: Пароль:
1C
1С v8
Как перевести строку на русском из HTML-кодов
0 mvgfirst
 
26.03.13
20:20
Имеем строку АЛИЯ

это, насколько я понимаю HTML-коды русских символов
и там закодировано слово "Алия"

как преобразовать ее в читаемое? средствами 1С? Можно с использованием внешних компонент

Вариант вручную через таблицу символов - не предлагать, ищу более красивое решение
1 Fragster
 
гуру
26.03.13
20:24
есть воможность на источник повлиять?
2 Fragster
 
гуру
26.03.13
20:26
там надо поменять html_entity_decode на htmlspecialchars просто
3 Fragster
 
гуру
26.03.13
20:27
вернее htmlentities на htmlspecialchars, а html_entity_decode - это то, что из твоей строки сделает правильную. Но на пхп :)
4 mvgfirst
 
26.03.13
20:51
На источник не повлиять
Это вебсервис в банке - на мой запрос возвращает мне XML который кирилические строки содержит в таком вот коде.

Про ПХП, я даже и не думаю. Я этот XML получаю как результат POST запроса, и в принципе могу делать с ним что хочу - но хочу как можно меньше "извращений"

А какую нибудь функцию, дав на вход которой эту строку на выходе получил бы номральные кирилический текст
5 Asmody
 
26.03.13
21:20
(0) ну, вообще-то это hex-коды символов utf-8
6 mvgfirst
 
26.03.13
21:26
(5) Ну вообщето я даже понял, Нашел даже табличку соответствия каждого кода символу - как это в 1С преобразовать?
8 mvgfirst
 
26.03.13
21:31
(7) Главное в тему ))) Трындец... так помог, спасибо друг )))
9 Filin
 
26.03.13
21:42
Глобальный контекст (Global context)
РаскодироватьСтроку (DecodeString)
Синтаксис:

РаскодироватьСтроку(<Строка>, <СпособКодированияСтроки>, <КодировкаСтроки>)

Чем не устраивает?
10 mvgfirst
 
26.03.13
22:09
(9) А попдробнее? СП молчит по поводу этой функции.
Гугл с первого тыка тоже не выдал полезной инфы.

Может у меня 1С бракованый? Или СП?
А может я уже к вечеру не вижу очевидного?
11 Filin
 
26.03.13
22:22
(10)Это в 8.3 только. У меня чо открыто было - там и посмотрел. Так что переходите на 8.3, там это реализовано (с) :)
12 mvgfirst
 
26.03.13
22:24
(11) Это обнадеживает )) Хотя бы теперь понятно зачем на нее переходить...
Что ж. Если там еще и MD5 заоднос SHA1 можно стандартными функциями получить - то точно перейду.
13 Filin
 
26.03.13
22:29
(12)
ХешФункция (HashFunction)
Значения
CRC32 (CRC32)
MD5 (MD5)

SHA-1 нету пока
14 mistеr
 
26.03.13
22:57
(0) ИзвлечениеТекста может помочь. Есть даже в 8.1.
15 Юрий Лазаренко
 
27.03.13
00:01
(0) Функцию для этого где-то в сети видел, строчек на 20 всего, поищи.
16 Web00001
 
27.03.13
04:25
Отличный адрес, где то в сети... иди поищи в той куче сотен петабайт
17 mvgfirst
 
27.03.13
13:01
(15) Хотя бы название этой функции?  Я вчера пол ночи рыл сеть - не нашел.
18 mzelensky
 
27.03.13
13:04
(0) чего вы мозги парите??? Какие-то функции, кодировки, раскодировки. Мыслите проще!!!!


Функция СформироватьТаблицуСоответствий()
   ТЗ=новый таблицаЗначений;
   ТЗ.Колонки.Добавить("КодБуквы");
   ТЗ.Колонки.Добавить("Буква");
   
   ДобавитьСтрокуВТЗ(ТЗ, "\u0410", "А");    
   ДобавитьСтрокуВТЗ(ТЗ, "\u0430", "а");//    
   ДобавитьСтрокуВТЗ(ТЗ, "\u0411", "Б");//    
   ДобавитьСтрокуВТЗ(ТЗ, "\u0431", "б");//
   ДобавитьСтрокуВТЗ(ТЗ, "\u0412", "В");//
   ДобавитьСтрокуВТЗ(ТЗ, "\u0432", "в");//
   ДобавитьСтрокуВТЗ(ТЗ, "\u0413", "Г");//    
   ДобавитьСтрокуВТЗ(ТЗ, "\u0433", "г");//    
   ДобавитьСтрокуВТЗ(ТЗ, "\u0414", "Д");//    
   ДобавитьСтрокуВТЗ(ТЗ, "\u0434", "д");//    
   ДобавитьСтрокуВТЗ(ТЗ, "\u0415", "Е");//    
   ДобавитьСтрокуВТЗ(ТЗ, "\u0435", "е");//    
   ДобавитьСтрокуВТЗ(ТЗ, "\u0401", "Ё");//    
   ДобавитьСтрокуВТЗ(ТЗ, "\u0451", "ё");//    
   ДобавитьСтрокуВТЗ(ТЗ, "\u0416", "Ж");//    
   ДобавитьСтрокуВТЗ(ТЗ, "\u0436", "ж");//    
   ДобавитьСтрокуВТЗ(ТЗ, "\u0417", "З");//    
   ДобавитьСтрокуВТЗ(ТЗ, "\u0437", "з");//    
   ДобавитьСтрокуВТЗ(ТЗ, "\u0418", "И");//    
   ДобавитьСтрокуВТЗ(ТЗ, "\u0438", "и");//    
   ДобавитьСтрокуВТЗ(ТЗ, "\u0419", "Й");//    
   ДобавитьСтрокуВТЗ(ТЗ, "\u0439", "й");//    
   ДобавитьСтрокуВТЗ(ТЗ, "\u041A", "К");//    
   ДобавитьСтрокуВТЗ(ТЗ, "\u043A", "к");//    
   ДобавитьСтрокуВТЗ(ТЗ, "\u041B", "Л");//    
   ДобавитьСтрокуВТЗ(ТЗ, "\u043B", "л");//    
   ДобавитьСтрокуВТЗ(ТЗ, "\u041C", "М");//    
   ДобавитьСтрокуВТЗ(ТЗ, "\u043C", "м");//    
   ДобавитьСтрокуВТЗ(ТЗ, "\u041D", "Н");//    
   ДобавитьСтрокуВТЗ(ТЗ, "\u043D", "н");//    
   ДобавитьСтрокуВТЗ(ТЗ, "\u041E", "О");//    
   ДобавитьСтрокуВТЗ(ТЗ, "\u043E", "о");//    
   ДобавитьСтрокуВТЗ(ТЗ, "\u041F", "П");//    
   ДобавитьСтрокуВТЗ(ТЗ, "\u043F", "п");//    
   ДобавитьСтрокуВТЗ(ТЗ, "\u0420", "Р");//    
   ДобавитьСтрокуВТЗ(ТЗ, "\u0440", "р");//    
   ДобавитьСтрокуВТЗ(ТЗ, "\u0421", "С");//    
   ДобавитьСтрокуВТЗ(ТЗ, "\u0441", "с");//    
   ДобавитьСтрокуВТЗ(ТЗ, "\u0422", "Т");//    
   ДобавитьСтрокуВТЗ(ТЗ, "\u0442", "т");//    
   ДобавитьСтрокуВТЗ(ТЗ, "\u0423", "У");//    
   ДобавитьСтрокуВТЗ(ТЗ, "\u0443", "у");//    
   ДобавитьСтрокуВТЗ(ТЗ, "\u0424", "Ф");//    
   ДобавитьСтрокуВТЗ(ТЗ, "\u0444", "ф");//    
   ДобавитьСтрокуВТЗ(ТЗ, "\u0425", "Х");//    
   ДобавитьСтрокуВТЗ(ТЗ, "\u0445", "х");//    
   ДобавитьСтрокуВТЗ(ТЗ, "\u0426", "Ц");//    
   ДобавитьСтрокуВТЗ(ТЗ, "\u0446", "ц");//    
   ДобавитьСтрокуВТЗ(ТЗ, "\u0427", "Ч");//    
   ДобавитьСтрокуВТЗ(ТЗ, "\u0447", "ч");//    
   ДобавитьСтрокуВТЗ(ТЗ, "\u0428", "Ш");//    
   ДобавитьСтрокуВТЗ(ТЗ, "\u0448", "ш");//    
   ДобавитьСтрокуВТЗ(ТЗ, "\u0429", "Щ");//    
   ДобавитьСтрокуВТЗ(ТЗ, "\u0449", "щ");//    
   ДобавитьСтрокуВТЗ(ТЗ, "\u042A", "Ъ");//    
   ДобавитьСтрокуВТЗ(ТЗ, "\u044A", "ъ");//    
   ДобавитьСтрокуВТЗ(ТЗ, "\u042B", "Ы");//    
   ДобавитьСтрокуВТЗ(ТЗ, "\u044B", "ы");//    
   ДобавитьСтрокуВТЗ(ТЗ, "\u042C", "Ь");//    
   ДобавитьСтрокуВТЗ(ТЗ, "\u044C", "ь");//    
   ДобавитьСтрокуВТЗ(ТЗ, "\u042D", "Э");//    
   ДобавитьСтрокуВТЗ(ТЗ, "\u044D", "э");//    
   ДобавитьСтрокуВТЗ(ТЗ, "\u042E", "Ю");//    
   ДобавитьСтрокуВТЗ(ТЗ, "\u044E", "ю");//    
   ДобавитьСтрокуВТЗ(ТЗ, "\u042F", "Я");//    
   ДобавитьСтрокуВТЗ(ТЗ, "\u044F", "я");//    
   ДобавитьСтрокуВТЗ(ТЗ, "\U2116", "№");//
   
   
   возврат ТЗ;
КонецФункции
19 mzelensky
 
27.03.13
13:04
(18) + ток в твоем случае нужно "\u" заменить на "&#x" и все! Нашли проблему...
20 mzelensky
 
27.03.13
13:05
(18) по этой функции прекрасно из "&#x410;&#x41B;&#x418;&#x42F;" получается "Алия"
21 Юрий Лазаренко
 
27.03.13
13:06
(17) Вот она: (18)
22 mvgfirst
 
27.03.13
13:11
(18)  Ты (0) читал?
"Вариант вручную через таблицу символов - не предлагать, ищу более красивое решение" - и чем твое решение красивее чем таблица соответствий символов?
23 mvgfirst
 
27.03.13
13:12
Ладно, я понял. Нет красивого решения значит нет.
Хотя и удивительно, неужели 1С-ники не сталкивались с такими проблемами ранее?

Буду лопатить все это через табличку
24 mvgfirst
 
27.03.13
13:14
(19) И кстати - это ж не вся функция, еще строку надо разбить на отдельные символы ))) А это ой как сложно и ресурсоемко!
25 ptiz
 
27.03.13
13:14
Перевести в DEC и использовать Символ(код) предлагали уже?
26 mzelensky
 
27.03.13
13:14
(22) А ты думаешь в этих твоих "внешних компонентах" будет сделано иначе???

Все кодирование основывается на таблице кодировок АСК 2. Хочешь короче - можешь анализировать коды символов, НО для некоторых букв есть исключения и можешь на этом ПОПАСТЬ!

Если хочешь просто "понтануться", то заунь эту функцию во внешнюю библиотеку (компоненту) и рассказывай всем ,что изобрел мега крутой алгоритм, который не имеет аналогов!
27 mzelensky
 
27.03.13
13:16
(24) эту функцию написал Я дл СЕБЯ месяца два назад. Поэтому, в моем случае, она полная.

А разбивка строки на слова делается другой функцией. Она есть в любой типовой.
28 mvgfirst
 
27.03.13
13:17
(26) Вот здесь спорить не буду ибо не располагаю достаточными знаниями об оптимизации алгоритмов по работе с кодировками, возможно что все именно так как ты говоришь....

Но как говорила одна моя знакомая: "Может быть я и дура - НО.... может быть и НЕТ!" )))
29 mzelensky
 
27.03.13
13:17
(24) а если ты про выделение отдельных СИМВОЛОВ, то опять таки...в чем проблема???

СтрокаВозврата=ВРег(ИсходнаяСтрока);
   Для каждого СтрокаТЗ из ТЗ_Соответствий2 цикл
       СтрокаВозврата=СтрЗаменить(СтрокаВозврата, СтрокаТЗ.Буква,СтрокаТЗ.КодБуквы );        
   КонецЦикла;
30 ptiz
 
27.03.13
13:42
Функция Из_Любой_В_10(Знач Значение="0",Нотация=36) Экспорт
    Если Нотация<=0 Тогда Возврат(0) КонецЕсли;
    Значение=СокрЛП(Значение);
    Если Значение="0" Тогда Возврат(0) КонецЕсли;
    Результат=0;
    Длина=СтрДлина(Значение);
    Для Х=1 По Длина Цикл
         М=1;
         Для У=1 По Длина-Х Цикл М=М*Нотация КонецЦикла;
         Результат=Результат+(Найти("0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ",Сред(Значение,Х,1))-1)*М;
    КонецЦикла;
    Возврат Окр(Результат);
КонецФункции

Функция РаскодироватьСтроку(СтрокаКодов)

   МассивКодов = ОбщегоНазначения.РазложитьСтрокуВМассивПодстрок(СтрокаКодов, ";");
   
   Стр = "";
   Для каждого СтрКод Из МассивКодов Цикл
   
       СтрКод = СтрЗаменить(СтрКод, "&#x", "");
       Если НЕ ЗначениеЗаполнено(СтрКод) Тогда
           Продолжить;
       КонецЕсли;
       
       Код10 = Из_Любой_В_10(СтрКод, 16);
       
       Стр = Стр + Символ(Код10);
   
   КонецЦикла;

   Возврат Стр;
   
КонецФункции // РаскодироватьСтроку()
31 mvgfirst
 
27.03.13
13:49
(30) Вариант из (29) мне понравился больше - он красивее. Только в таблицу соответствия коды символов надо будет добавлять вместе с ";"