Уведомления

Группа в Telegram: @pythonsu

#1 Март 2, 2015 10:10:26

hdj
Зарегистрирован: 2014-11-19
Сообщения: 27
Репутация: +  0  -
Профиль   Отправить e-mail  

Где прописать 'LC_ALL='ru_RU.UTF-8'?

Добрый день, Cron выдаёт ошибку “UnicodeEncodeError: ‘ascii’ codec can't encode characters in position 1-6: ordinal not in range(128)”. Порыскал, вроде надо прописать LC_ALL='ru_RU.UTF-8'.
http://djbook.ru/rel1.7/howto/deployment/wsgi/index.html
http://habrahabr.ru/post/116894/

Вопрос: в каком файле это надо указать и как этот файл найти? Пробовал в settings.py.



Офлайн

#2 Март 2, 2015 10:56:13

JOHN_16
От: Россия, Петропавловск-Камчатск
Зарегистрирован: 2010-03-22
Сообщения: 3292
Репутация: +  221  -
Профиль   Отправить e-mail  

Где прописать 'LC_ALL='ru_RU.UTF-8'?

hdj
LC_ALL='ru_RU.UTF-8'.
вообще то это запись в системном окружении unix подобных систем. Это НЕ относится к джанго и питону.
Для начала, нужно убедиться в том что именно эти настройки не правильные, для этого введите в консоли команду locale от имени пользователя который запускает задачу Cron. Там появится строчки либо такие либо иные:
LANG=ru_RU.UTF-8
LC_ALL=
Что бы явно прописать эти настройки нужно в домашней директории пользователя в файле .bashrc написать нужные параметры, например export LC_ALL=“ru_RU.UTF-8” .

Однако, работая с python2 не стоит забывать о базовых правилах работы с не latin кодировкой. В python файле в заголовке файла должна присутствовать строчка с указанием кодировки файла # coding: utf-8 и при этом сам файл должен быть кодирован именно в этой кодировке.



_________________________________________________________________________________
полезный блог о python john16blog.blogspot.com

Офлайн

#3 Март 4, 2015 10:20:14

hdj
Зарегистрирован: 2014-11-19
Сообщения: 27
Репутация: +  0  -
Профиль   Отправить e-mail  

Где прописать 'LC_ALL='ru_RU.UTF-8'?

У меня python 3.4. # coding: utf-8 и кодировка самого текста в utf-8 не помогли.

locale выдаёт все значения переменных как ru_RU.UTF-8.

Интересный момент. Пробовал в консоли вводить:
export LANG='en_US.UTF-8'
export LC_ALL='en_US.UTF-8'

Переменные меняются, но ошибка также выводится.

А если прописываю в команде Cron'у (в панеле управления):
export LANG='en_US.UTF-8' && export LC_ALL='en_US.UTF-8' && /home/***/.virtualenvs/***/bin/python manage.py main_f > /home/***/domains/***.djangohost.name/public_html/result_cron.txt 2>&1
то ошибки не возникает.

JOHN_16
Что бы явно прописать эти настройки нужно в домашней директории пользователя в файле .bashrc написать нужные параметры, например export LC_ALL=“ru_RU.UTF-8” .
Где найти домашнюю директорию пользователя? У меня в папке /home/my_user_name/ есть два файла .bash_history и .bash_profile.

Отредактировано hdj (Март 4, 2015 10:21:28)

Офлайн

#4 Март 4, 2015 10:50:18

JOHN_16
От: Россия, Петропавловск-Камчатск
Зарегистрирован: 2010-03-22
Сообщения: 3292
Репутация: +  221  -
Профиль   Отправить e-mail  

Где прописать 'LC_ALL='ru_RU.UTF-8'?

hdj
самому создать файл.
еще как вариант в кроне прописать PYTHONIOENCODING=utf8 перед командой python . Оказывается это у меня же на сервере и используется. Видимо тоже была такая же ошибка. Но у меня Питон 2, почему такое с 3 происходит при настроенной локали - пока что загадка



_________________________________________________________________________________
полезный блог о python john16blog.blogspot.com

Офлайн

#5 Март 6, 2015 10:54:00

hdj
Зарегистрирован: 2014-11-19
Сообщения: 27
Репутация: +  0  -
Профиль   Отправить e-mail  

Где прописать 'LC_ALL='ru_RU.UTF-8'?

JOHN_16
hdjсамому создать файл.еще как вариант в кроне прописать PYTHONIOENCODING=utf8 перед командой python.
А как это прописать?

И ещё, я пробовал в коде питона писать:
import locale
locale.setlocale(locale.LC_ALL, ‘de_DE.utf8’)
Но getlocale выдавало US-Ascii помойму.

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version