На сервере работает демон 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.
>[оверквотинг удален]
> 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
>[оверквотинг удален]
>> 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(не туда ответил, прошу прощения)
>[оверквотинг удален]
> 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.
Добавил в начало скрипта строки "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.