Найти - Пользователи
Полная версия: конфликт кодировки
Начало » Python для экспертов » конфликт кодировки
1 2
megoloman
Здравствуйте! Помогите пожалуйста со следующей проблемой. Вопрос из тестового задания.

В приведенном примере:

$cat test.py
# -*- coding: utf8 -*-

s = u"ы"
print "Hello, %s" %s

$python test.py > /dev/null
Traceback (most recent call last):
File "task1.py", line 5, in <module>
print "Hello, %s" %s
UnicodeEncodeError: 'ascii' codec can't encode character u'\u044b' in position 7: ordinal not in range(128)


Как исправить код test.py что-бы не было ошибки?
doza_and
# -*- coding: utf8 -*-
s = u"ы"
print u"Hello, %s" %s
megoloman
По-прежнему ошибка происходит
Rodegast
Сам файл в utf8 сохранён?
megoloman
Да
doza_and
А почему ругается на 5 строку когда у вас их 4? А без dev null что будет?
megoloman
последняя строка случайно сместилась на одну вверх когда на форум заливал, без dev null работает нормально, но нужно, чтобы именно с dev null отрабатывало
doza_and
Это надо наверное либо изменить настройки локали. Ваш dev null не может воспроизвести unicode либо перед печатью попробовать провести явную кодировку(encode()).
old_monty
megoloman
Как исправить код test.py что-бы не было ошибки?
Попробуйте так:
# -*- coding: utf-8 -*-
s = u"ы".encode("utf-8")
print ("Hello, %s"  %s)
В этом случае у меня $python test.py выводит как и раньше, а $python test.py > /dev/null не ругается.

JOHN_16
john_16@linux-home:~> cat t.py
# -*- coding: utf-8 -*-
print u'Привет'
john_16@linux-home:~> python2 t.py 
Привет
john_16@linux-home:~> python2 t.py  > /dev/null
Traceback (most recent call last):
  File "t.py", line 3, in <module>
    print u'Привет'
UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-5: ordinal not in range(128)
john_16@linux-home:~> export PYTHONIOENCODING=UTF8
john_16@linux-home:~> python2 t.py  > /dev/null
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB