Python getpass кодирование - PullRequest
       3

Python getpass кодирование

5 голосов
/ 08 ноября 2010

Представьте, что у меня есть следующий код:

  # -*- coding: utf-8 -*-
  from getpass import getpass

  #print u'Введите пароль!'.encode('cp866')
  passwd = getpass (u'Введите пароль!'.encode('cp866'))

Это для того, чтобы попросить пользователя ввести свой пароль в консоли Windows (таким образом, кодировка 'cp866'). Пользователь видит следующее приглашение: "??? ¤? A?? AR? I!" Но если вы раскомментируете строку с печатью, вы увидите правильный текст. У меня уже есть обходной путь, сначала сделайте инструкцию print, затем введите getpass с пустым приглашением, но я просто хочу знать, что именно не так с моим кодом и почему я получаю этот результат? Один совет, если это прояснит ситуацию: getpass использует msvcrt.putch (char) для размещения символов на консоли.

Ответы [ 2 ]

1 голос
/ 08 ноября 2010

putch() может делать свой собственный перевод с вашей кодовой страницы ANSI (cp1251) на вашу кодовую страницу OEM (cp866).Попробуйте вместо этого кодировать cp1251.

0 голосов
/ 08 ноября 2010

По моему опыту, состояние Unicode в Python вызывает смущение. Время от времени я сталкиваюсь с подобного рода проблемами в нескольких библиотеках, страдающих миопией UTF. Как и в ответе Кичика, в большинстве случаев изменение кодировки на архаичное является единственным решением. См. http://bugs.python.org/issue1436203 для вашей конкретной ошибки.

Однако это может быть неприменимо к схеме для всего сайта, которая использует исключительно юникод. Если это так, единственным вариантом будет дублирование функциональности так называемого «переносимого» getpass с использованием raw_input, sys.stdin или подобных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...