VIDEOCHAT  ::   FAQ  ::   Поиск  ::   Регистрация  ::   Вход

шум в строке... ICONV

Новичком считается только что прочитавший «Астериск - будущее телефонии»
http://asterisk.ru/knowledgebase/books
и пытающийся сделать большее

Модераторы: april22, Zavr2008

Ответить
1g0r
Сообщения: 126
Зарегистрирован: 25 ноя 2013, 16:56

шум в строке... ICONV

Сообщение 1g0r »

Имеем строку...
Set(foo=парам пам пам);

конвертируем эту строку из UTF8 в CP1251 (консоль в UTF8, а передать надо в WINDOWS-1251)
Set(foo=${ICONV(UTF-8,WINDOWS-1251,${foo})});

В результате в переменной ${foo} имеем начало строки в CP1251 и кусок в этой же строке изначального в UTF8(то есть в одной стоке присутствует и правильная кодировка и шумы из начальной строки).

Как правильно это побороть я так и не понял.
Пока сделал костыли в виде

Set(foo=парам пам пам);
Set(foo=${foo}[cut]); // в конец строки добавил несколько символов которые будут являться разделителем
Set(foo=${ICONV(UTF8,CP1251,${foo})}); //перекодирую строку
Set(foo=${CUT(foo,"[cut]",1)}); // отрезаю шум, который будет после заданного разделителя
profit.

Это хоть и работает, но мне кажется должно быть более правильное решение данной проблемы.

Не понимаю поведения ICONV в астериске... думается мне, что это из-за того что кирилица кодируется в одном случае 2мя байтами а в другом 1м байтом.

Как же более корректно побороть сей недуг не навешивая лишних действий?!?!
virus_net
Сообщения: 2337
Зарегистрирован: 05 июн 2013, 08:12
Откуда: Москва

Re: шум в строке... ICONV

Сообщение virus_net »

Скорее всего это происходит из-за того что вы переприсваиваете переменную:
1g0r писал(а):Set(foo=${ICONV(UTF-8,WINDOWS-1251,${foo})});
Попробуйте использовать другую переменную для уже перекодированного:

Код: Выделить всё

Set(iconv=${ICONV(UTF-8,WINDOWS-1251,${foo})});
мой SIP URI sip:virus_net@asterisk.ru
bitname.ru - Домены .bit (namecoin) .emc .coin .lib .bazar (emercoin)

ENUMER - звони бесплатно и напрямую.
1g0r
Сообщения: 126
Зарегистрирован: 25 ноя 2013, 16:56

Re: шум в строке... ICONV

Сообщение 1g0r »

Это было первое что я попробовал ) Строка такая же корявая.
virus_net
Сообщения: 2337
Зарегистрирован: 05 июн 2013, 08:12
Откуда: Москва

Re: шум в строке... ICONV

Сообщение virus_net »

покажите лог исполнения диалплана
мой SIP URI sip:virus_net@asterisk.ru
bitname.ru - Домены .bit (namecoin) .emc .coin .lib .bazar (emercoin)

ENUMER - звони бесплатно и напрямую.
1g0r
Сообщения: 126
Зарегистрирован: 25 ноя 2013, 16:56

Re: шум в строке... ICONV

Сообщение 1g0r »

Кусок диалплана
NoOp(=================================================================);
Set(foo=парам пам пам);
Set(foo=${foo}[cut]);.
NoOp(foo=${foo});
Set(foo=${ICONV(UTF8,CP1251,${foo})});
NoOp(foo=${foo});
Set(foo=${CUT(foo,"[cut]",1)});
NoOp(foo=${foo});
NoOp(========================= END ===================================);[/code]




Отработака диалплана

Код: Выделить всё

    -- Executing [7971@FROM_PRI:1] NoOp("DAHDI/i1/1070-3808", "=================================================================") in new stack
    -- Executing [7971@FROM_PRI:2] Set("DAHDI/i1/1070-3808", "foo=парам пам пам") in new stack
    -- Executing [7971@FROM_PRI:3] Set("DAHDI/i1/1070-3808", "foo=парам пам пам[cut]") in new stack
    -- Executing [7971@FROM_PRI:4] NoOp("DAHDI/i1/1070-3808", "foo=парам пам пам[cut]") in new stack
    -- Executing [7971@FROM_PRI:5] Set("DAHDI/i1/1070-3808", "foo=ࡰ᪠࡬ ࡬[cut]᪠࡬ ࡬") in new stack
    -- Executing [7971@FROM_PRI:6] NoOp("DAHDI/i1/1070-3808", "foo=ࡰ᪠࡬ ࡬[cut]᪠࡬ ࡬") in new stack
    -- Executing [7971@FROM_PRI:7] Set("DAHDI/i1/1070-3808", "foo=ࡰ᪠࡬ ࡬") in new stack
    -- Executing [7971@FROM_PRI:8] NoOp("DAHDI/i1/1070-3808", "foo="ࡰ᪠࡬ ࡬"") in new stack
    -- Executing [7971@FROM_PRI:9] NoOp("DAHDI/i1/1070-3808", "========================= END ===================================") in new stack
virus_net
Сообщения: 2337
Зарегистрирован: 05 июн 2013, 08:12
Откуда: Москва

Re: шум в строке... ICONV

Сообщение virus_net »

1g0r писал(а):Set(foo=${ICONV(UTF8,CP1251,${foo})});
Все же UTF-8.

Вот исполнение этого dialplan`а на Asterisk 1.8, сделал скрин т.к. консоль в KOI8-R:
ast.iconv.jpg
Был UTF-8, а потом стал CP1251. Если вывод копипастнуть в файлик и установить кодировку CP1251, то "парам пам пам" отчетливо читаются:
PRIME_BBCODE_SPOILER_SHOW PRIME_BBCODE_SPOILER:
ast.iconv2.jpg
ast.iconv3.jpg
Без каких либо "шумов". Посему вопрос: вы точно уверены что изначальный текст у вас в UTF ?

А если вы в командной строке выполняете iconv ? А если через system ? Результат тот же ?
мой SIP URI sip:virus_net@asterisk.ru
bitname.ru - Домены .bit (namecoin) .emc .coin .lib .bazar (emercoin)

ENUMER - звони бесплатно и напрямую.
1g0r
Сообщения: 126
Зарегистрирован: 25 ноя 2013, 16:56

Re: шум в строке... ICONV

Сообщение 1g0r »

В системной консоли шумов Нет.
Iconv -l говорит что применимы и UTF8 и Utf-8
Ответить
© 2008 — 2025 Asterisk.ru
Digium, Asterisk and AsteriskNOW are registered trademarks of Digium, Inc.
Design and development by PostMet-Netzwerk GmbH