0

Пример кода.

# -*-coding: utf-8-*-
print u"Введите что-нибудь умное"
var_anybody = raw_input()
print u"Вот что он написал %r" %r

Если пользователь введет русские буквы, получается что-то вроде этого:

\xaf\xe0\xa8\xa2\xa5\xe2
  1. Подскажите как сделать, что бы пользователь мог вводить русские буквы и русские буквы корректно отображались.

  2. А так же помогите пожалуйста как сделать подсказки на русском в raw_input('нажмите кнопку')

  • Я придумал как задавать подсказку легкой хитростью: print u"Ответьте на вопрос", raw_input() но опять же она не работает если raw_input() назначить в переменную print u"Ответьте на вопрос", var_2 = raw_input() В этом случае выдаст ошибку. Есть мысли как с этим бороться? – Vikentsi Apr 17 '17 at 19:40
  • https://ru.stackoverflow.com/questions/431817/%D0%9A%D0%B0%D0%BA-%D1%81%D0%B4%D0%B5%D0%BB%D0%B0%D1%82%D1%8C-%D1%8E%D0%BD%D0%B8%D0%BA%D0%BE%D0%B4%D0%BD%D1%83%D1%8E-%D1%81%D1%82%D1%80%D0%BE%D0%BA%D1%83-%D1%87%D0%B8%D1%82%D0%B0%D0%B1%D0%B5%D0%BB%D1%8C%D0%BD%D0%BE%D0%B9 – titov_andrei Apr 17 '17 at 20:02
  • @titov_andrei Спасибо данная тема помогла найти мне ответы на мои вопросы. Моя тема может быть актуально, потому что тот вопрос на все возможные запросы от raw_input() в гугле не находится. – Vikentsi Apr 18 '17 at 12:56

2 Answers2

1

У вас буквы уже нормально вводятся. Проблема в том как вы их пытаетесь отображать. "%r" % s вызывает repr(s), которое вернёт текстовое представление объекта полезное для отладки.

В вашем случае, вы видите текстовое представление байтовой строки (все байты из не-ascii диапазона экранированы используя \xHH).

Чтобы напечатать, что raw_input() вернула, печатайте переменную напрямую:

s = raw_input(prompt)
print u'Получил', s

Если isinstance(prompt, unicode) и raw_input(prompt) не работает у вас (к примеру, UnicodeEncodeError выбрасывается), то используйте:

print prompt,
sys.stdout.flush()

Это достаточно, чтобы произвольные Unicode символы поддерживать, для ввода/вывода на системах с utf-8 locale (не Windows). На Windows, чтобы ввод/вывод работал даже для символов вне ANSI/OEM code pages в консоли (чтобы ввод на нескольких языках поддерживать, а не только язык Windows), можно использовать win-unicode-console пакет. См. ещё Проблемы с кодировкой Python 2.7

jfs
  • 52,361
0

Узнал ответ на свой основной вопрос.

Можно решить следующим образом:

# -*-coding: utf-8-*-
print u"Введите что-нибудь умное"
var_anybody = raw_input()
print u"Вот что он написал ", "".join(var_anybody)

Теперь если пользователь введет русские слова они выведутся на экран правильно.

  1. Вопрос с комментария. Что бы вывести в одну строку:

    print u"Ответьте на вопрос", var_2 = raw_input() надо присваивать переменную с новой строки после запятой:

    print u"Ответьте на вопрос", var_2 = raw_input()

p.s Спасибо @titov_andrei за направление поиска и @main за ответ в той теме.

  • не следует ''.join() для строки вызывать. – jfs May 01 '17 at 18:57
  • @jfs почему не следует вызывать для строки? – Vikentsi May 03 '17 at 06:31
  • какую операцию result = ''.join(arg) по вашему реализует, если arg строка? Для наглядности, откройте REPL, поиграйтесь с разными arg значениями и сравните их с result. – jfs May 03 '17 at 12:53
  • @jfc Я понял. Спасибо. – Vikentsi May 05 '17 at 07:04