我知道 getpass
在 Python 3 中返回一个 unicode 字符串,在 Python 2 中返回某种 str
。但是,我不确定 Python 2 上的编码.
如何以在 Python 2 和 3 中均适用的方式将其返回的值转换为 UTF-8 编码的 bytes
对象?
(我不使用 6
,而是尝试编写仅适用于两者的代码,而不是 if
查找版本号。)
最佳答案
在 Python 2 中,getpass()
返回普通的 Python 2 字符串,即字节字符串。它使用终端的编码,因此如果终端设置为使用 UTF-8,您不需要执行任何操作 - 它返回的字符串已经是 UTF-8 编码的字节字符串。但为了保持稳健,您可以这样做:
import sys
from getpass import getpass
p = getpass()
if isinstance(p, bytes):
p = p.decode(sys.stdin.encoding)
p = p.encode('utf-8') # :D
我们使用 if isinstance(p, bytes):
来阻止 Python 3 接触 getpass()
返回的字符串,然后我们将 Unicode 编码为 UTF- 8
关于python - 使用具有 python 2 和 3 兼容性的 getpass,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32008408/