python getpass编码

Gra*_*raf 5 python windows encoding

想象一下,我有以下代码:

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

  #print u'??????? ??????!'.encode('cp866')
  passwd = getpass (u'??????? ??????!'.encode('cp866'))
Run Code Online (Sandbox Code Playgroud)

这是为了要求用户在Windows控制台中输入密码(因此编码为'cp866').用户看到以下提示:"???¤?a?aR?i!" 但如果您使用print取消注释该行,您将看到正确的文本.我已经有一个解决方法,首先制作一个print语句,然后发出带有空提示符的getpass,但我只是想知道我的代码到底出了什么问题,为什么我得到这个结果?一个提示,如果它更清楚:getpass使用msvcrt.putch(char)将字符放在控制台上.

kic*_*hik 1

putch()可能会自行从 ANSI 代码页 (cp1251) 转换为 OEM 代码页 (cp866)。尝试使用 cp1251 进行编码。