Вы правы, полагая, что это проблема кодировки. Вам необходимо установить соответствующие переменные окружения в начале вашего crontab.
Примерно так должно работать:
LANG=en_US.UTF-8
LC_CTYPE=en_US.UTF-8
При желании используйте LC_ALL вместо LC_CTYPE.
Ссылка: http://opengroup.org/onlinepubs/007908799/xbd/envvar.html
Редактировать: Причина, по которой он отображается нормально, когда вы запускаете его в вашей оболочке, возможно, в том, что в вашей оболочке установлены вышеуказанные переменные env.
Для проверки выполните ' locale ' в вашей оболочке, а затем сравните с выводом cronjob, который выполняет ту же команду.
Повторное редактирование : Хорошо, так что это не проблема env var.
Я предполагаю, что вы используете mailx, так как это наиболее распространенный в наши дни. Это manpage говорит:
Набор символов для исходящих
сообщения не обязательно одинаковы
как тот, который используется на терминале. Если
исходящее текстовое сообщение содержит
символы не представимые в
US-ASCII, используемый набор символов
должен быть объявлен в своем заголовке.
Допустимые значения могут быть объявлены
используя переменную sendcharsets,
Итак, попробуйте добавить следующие аргументы при вызове mail:
-S sendcharsets=utf-8,iso-8859-1