【问题标题】:Access sys.argv as bytes in Python 3 [duplicate]在 Python 3 中以字节形式访问 sys.argv [重复]
【发布时间】:2014-11-28 09:15:19
【问题描述】:

正如标题所说,python 3 中是否有 sys.argv 等效项允许我将参数读取为字节?

我想要这个的原因是,我有一个脚本,它接受一个字节 (\xe9\x88...) 作为它的第一个 arg,第一个 arg 应该是从 utf8 字符串 sys.argv 转换的字节将尝试使用某种编码解码第一个 arg,这可能不是 utf8,因此程序可能会失败。如果我可以在不调用 sys.argv 的情况下访问 args,则不会完成转换。

【问题讨论】:

  • 操作系统和系统区域设置是什么?如何在参数中传递“另一种编码的字符串”?这决定了程序实际从系统中得到什么。

标签: python python-3.x


【解决方案1】:

有一个issue on the Python bug tracker关于这个:

在某些情况下,命令行的编码不正确或 未知。 sys.argv 使用文件系统编码解码,可以 是错的。例如。请参阅 issue #4388(好的,这是一个错误,应该修复)。

作为 os.environb,拥有 sys.argv 的字节版本会很有用 能够决定用于解码每个参数的编码,或 如果我们不关心编码,就可以操作字节。

由于在 Python 3 上 sys.argv 是使用文件系统编码进行编码的,因此针对该错误的建议解决方案是使用 os.fsencode

argvb = list(map(os.fsencode, sys.argv))

os.fsencode 使用surrogateescape 编码对字符串进行编码,该编码在PEP-383 中定义。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-10-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-25
    • 2014-04-14
    • 2019-11-01
    • 2014-05-27
    相关资源
    最近更新 更多