URL: https://www.opennet.ru/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID1
Нить номер: 97182
[ Назад ]

Исходное сообщение
"Демон запускает sh-скрипт с кириллицей = проблема"

Отправлено yurybx , 19-Апр-18 18:42 
На сервере работает демон asterisk от имени одноименного пользователя. Этот демон в определенных ситуациях запускает sh-скрипт, который по телнету передаёт кириллицу на GSM-шлюз (отправляет SMS). Проблема в том, что у меня не получается переключить кодировку скрипта на utf-8, из-за этого sh-скрипт передает кракозябры. Инструкция setenv в контексте пользователя не работает (setenv: not found). Если задать локаль командой "pw usermod -n asterisk -L russian", то скрипт по прежнему выполняется в латинской локали:
LANG=
LC_CTYPE="C"
LC_COLLATE="C"
LC_TIME="C"
LC_NUMERIC="C"
LC_MONETARY="C"
LC_MESSAGES="C"
LC_ALL=
Как решить проблему?
Запуск asterisk-а прописан в rc.conf.
Версия FreeBSD 10.3.

Содержание

Сообщения в этом обсуждении
"Демон запускает sh-скрипт с кириллицей = проблема"
Отправлено universite , 19-Апр-18 19:18 
>[оверквотинг удален]
> LC_CTYPE="C"
> LC_COLLATE="C"
> LC_TIME="C"
> LC_NUMERIC="C"
> LC_MONETARY="C"
> LC_MESSAGES="C"
> LC_ALL=
> Как решить проблему?
> Запуск asterisk-а прописан в rc.conf.
> Версия FreeBSD 10.3.

/etc/csh.cshrc
        setenv LANG ru_RU.UTF-8
        setenv MM_CHARSET UTF-8



"Демон запускает sh-скрипт с кириллицей = проблема"
Отправлено PereresusNeVlezaetBuggy , 20-Апр-18 09:42 
>[оверквотинг удален]
>> LC_NUMERIC="C"
>> LC_MONETARY="C"
>> LC_MESSAGES="C"
>> LC_ALL=
>> Как решить проблему?
>> Запуск asterisk-а прописан в rc.conf.
>> Версия FreeBSD 10.3.
> /etc/csh.cshrc
>         setenv LANG ru_RU.UTF-8
>         setenv MM_CHARSET UTF-8

(не туда ответил, прошу прощения)


"Демон запускает sh-скрипт с кириллицей = проблема"
Отправлено PereresusNeVlezaetBuggy , 20-Апр-18 09:43 
>[оверквотинг удален]
> LC_CTYPE="C"
> LC_COLLATE="C"
> LC_TIME="C"
> LC_NUMERIC="C"
> LC_MONETARY="C"
> LC_MESSAGES="C"
> LC_ALL=
> Как решить проблему?
> Запуск asterisk-а прописан в rc.conf.
> Версия FreeBSD 10.3.

Для начала, чтобы не было путаницы:

1. «Кодировка скрипта» — это кодировка его тела. С этим, как я понимаю, проблем нет.

2. То, что в LC_* и LANG, меняет не кодировку (сам текст не перекодируется), а восприятие обрабатываемого текста запускаемыми в данном контексте приложениями, как закодированного в указанной кодировке.

Теперь по сути: telnet изначально 7-битный, поэтому 8-й бит может банально отрезаться. Покажите отрывок из скрипта. Может, в вашем случае подойдёт nc/netcat вместо telnet?

И не забывайте, что в собственно SMS используется отнюдь не UTF-8...

И, да, setenv и не будет работать, так как это команда csh, а у вас sh-скрипт, совсем другой язык. Аналог setenv в Bourne-скриптах — export.


"Демон запускает sh-скрипт с кириллицей = проблема"
Отправлено yurybx , 20-Апр-18 10:07 
Добавил в начало скрипта строки "export LANG=ru_RU.UTF-8" и "export MM_CHARSET=UTF-8" - теперь всё работает как надо. Спасибо!

>[оверквотинг удален]
> 2. То, что в LC_* и LANG, меняет не кодировку (сам текст
> не перекодируется), а восприятие обрабатываемого текста запускаемыми в данном контексте
> приложениями, как закодированного в указанной кодировке.
> Теперь по сути: telnet изначально 7-битный, поэтому 8-й бит может банально отрезаться.
> Покажите отрывок из скрипта. Может, в вашем случае подойдёт nc/netcat вместо
> telnet?
> И не забывайте, что в собственно SMS используется отнюдь не UTF-8...
> И, да, setenv и не будет работать, так как это команда csh,
> а у вас sh-скрипт, совсем другой язык. Аналог setenv в Bourne-скриптах
> — export.