python - 使用具有 python 2 和 3 兼容性的 getpass

标签 python python-2.7 python-3.x character-encoding

我知道 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/

相关文章:

Python 3.4 支持使用重定向器进行打印操作 >>

python - 使用 csv.reader 以 utf-8 打开文件

python - 如何使用 "truffle"搜索以 `pip` 开头的所有 Python 包?

python - 将列表元素的关键字与 pandas 列匹配

python - Python Tensorflow 中的人脸识别系统

python - 将 float32 数据类型的 numpy 数组转换为十六进制格式

python - 在numpy中获得matrix < matrix结果的最快方法是什么?

python-2.7 - 使用opencv+python计算汽车

python - 如何防止列表在用作函数参数后发生变化?

python-3.x - 创建一个绘制线图,其中线按类别着色?