|
Как перевести строку на русском из 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) по этой функции прекрасно из "АЛИЯ" получается "Алия"
|
|||
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) мне понравился больше - он красивее. Только в таблицу соответствия коды символов надо будет добавлять вместе с ";"
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |