2015-11-27 2 views
0

У меня есть приложение Django 1.8, работающее на сервере с Python 3, и я получаю UnicodeDecodeError при регистрации и печати строк со специальными символами.Python3 UnicodeDecodeError

>:python --version python 3.4.3

Например, если я пытаюсь запустить глупый метод в оболочке:

def print_test(): 
     print('Test: èè') # any 'special char' like ä ç é û... 

я получаю трассировку стека:

>>> print_test() 
Traceback (most recent call last): 
    File "<console>", line 1, in <module> 
    File "/home/sailingadmin/sailing-admin/utest.py", line 2, in print_test 
    print('This is a test: \xe8\xe8') 
UnicodeEncodeError: 'ascii' codec can't encode characters in position 16-17: ordinal not in range(128) 

То же с print(u'Test: èè')

Зачем возникает эта ошибка?

utest.py кодируется в UTF-8 (Python 3 по умолчанию для исходных файлов)

>:echo $LC_CTYPE UTF-8

Все протоколирования и печати поднимает UnicodeEncodeError ... формат

+0

Здесь важна переменная среды LC_ *, используемая вашим сервером process_, а не те, которые определены для вашей учетной записи пользователя. Вы можете проверить конфигурацию вашего процесса и конфигурацию сервера. –

+0

@brunodesthuilliers Вы имеете в виду '/ proc//environ'? LC_CTYPE = UTF-8 и LANG = en_US.UTF-8, никакие другие переменные кодировки там не установлены. – Ire

+0

Я имею в виду «переменные среды для процесса, который будет использоваться в вашем процессе». Жаль, что мне не приходилось сталкиваться с такой проблемой уже несколько лет (благодаря нашему sysadmin ), поэтому Я не помню всех подробностей: -/ –

ответ

1

LC_CTYPE следующим образом: en_US.UTF-8 (char map после точки) Затем python использует его как кодировку по умолчанию для ведения журнала и io.