gpt4 book ai didi

python - 在 python 中以二进制形式访问系统输入

转载 作者:太空宇宙 更新时间:2023-11-03 11:39:23 25 4
gpt4 key购买 nike

我很喜欢 Python 3 对 unicode 问题的重视。但是在一个地方我不确定它在做什么。

据我了解,argv 和环境变量以字节形式从操作系统传输到 python 可执行文件。 Python 选择一种编码,数据在 sys.argvos.environ 中作为 unicode 字符串公开给用户程序。

我不明白 python 是如何选择这种编码的。我认为它与 LC 变量有关,但这似乎不起作用。

$ printf -v CENTS '\xC2\xA2' ; export CENTS ; echo "0xC2 0xA2 in UTF-8 is $CENTS"
0xC2 0xA2 in UTF-8 is ¢
$ printf -v LBS '\xC2\xA3' ; echo "0xC2 0xA3 in UTF-8 is $LBS"
0xC2 0xA3 in UTF-8 is £
$ cat <<EOF >test.py
import os, sys
print("0xC2 0xA2 decodes to", *(hex(ord(c)) for c in os.environ.get("CENTS")))
print("0xC2 0xA3 decodes to", *(hex(ord(c)) for c in sys.argv[1]))
EOF
$ python3 test.py $LBS
0xC2 0xA2 decodes to 0xa2
0xC2 0xA3 decodes to 0xa3
$ LC_ALL=es_ES.ISO8859-1 python3 test.py $LBS
0xC2 0xA2 decodes to 0xa2
0xC2 0xA3 decodes to 0xa3

我预计第二个会给出 0xc2 0xa2 和 0xc2 0xa3,但 LC_ALL 似乎没有任何区别。

有没有办法绕过编码,只看到提供给可执行文件的二进制数据?

可选地,Python 如何选择一种编码以及它在哪里公开它?我认为它是在 sys.getfilesystemencoding() 中公开的,但它的文档非常稀疏,没有说明任何内容。非常感谢指向官方文档的指针。

最佳答案

根据链接的答案和他们引用的文档,这里有一个简短的答案:

对于os.environ,参见os.environb ,它在非 Windows 系统上可用,并提供对底层字节的直接访问。

sys.argv 使用系统确定的特殊编码(取自 LANG)自动解码为 Unicode 对象,原始字节不会直接暴露。要访问它们,我认为或多或少可靠,您可以使用 os.fsencode .

我觉得这可以玩,但我稍后会跟进。

关于python - 在 python 中以二进制形式访问系统输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52783581/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com