Возможно вечный вопрос, но все-таки не могу с ним справиться. Как заставить pyhton понять urf8
В начале все есть для этого # -*- coding: utf-8 -*-
import sys
reload(sys)
sys.setdefaultencoding('utf-8')
И так, если пишем: >submit = "Войти"
>print submit
Войти
здесь все верно
Но если код вот такой >login_form = [
('log', 'admin'),
('login', submit)]
>print login_form
[('log', 'admin'), ('login', '\xd0\x92\xd0\xbe\xd0\xb9\xd1\x82\xd0\xb8')
Кстати, после этого у вас слово «Войти» хоть и будет в юникоде, выводиться оно все равно будет кодами — потому что print для объектов, для которых вы не определили способ вывода, будет выводить внутреннее представление.
> Но ведь sys.setdefaultencoding('utf-8') как раз это и задает или нет?
Ну дак прочитайте документацию:
> Set the current default string encoding used by the Unicode implementation.
Юникод имплементейшен. Вы же задаете строку без префикса u, т.е. не как юникодную.
>Юникод имплементейшен. Вы же задаете строку без префикса u, т.е. не как юникодную.
если задаю через u' эффект тот же, repr тоже не привел к успеху пока… еще экспериментирую
> если задаю через u' эффект тот же,
Я вам так сразу и написал — будет внутренее представление. Хотите нормальный вывод — скажите Питону, как правильно выводить ваши данные. Например:
"\n".join("%s: %s" % field for field in login_form)
>отите нормальный вывод — скажите Питону, как правильно выводить ваши данные.
@homm, спасибо за ответ, действительно так все могу видеть в нужной кодировке
Да вроде правильно поняли, проблема когда переменная находится в объекте, тогда utf не отображается. но ответ @homm'a помог, про "\n".join("%s: %s" % field for field in login_form), хотя еще остались вопросы…
Это просто так выписывается в консоль. Кодировка осталась таже (тоесть в том виде, в котором Вы видите стринг в листе). Прикол здесь в том, что во время принт этот стринг (print «Войти») переводится в «юзером читабельный» формат, а простой принт над объектом, этот преревод не делает.
Спасибо за объяснение. Действительно так все и происходит. Осталось найти решение как его привести к читабельному виду в объекте. Ведь .decode(utf8) и unicode(string,'utf8) не помогают…