在python中以二进制形式访问系统输入
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了在python中以二进制形式访问系统输入,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1421字,纯文字阅读大概需要3分钟。
内容图文
![在python中以二进制形式访问系统输入](/upload/InfoBanner/zyjiaocheng/775/37932a2c31264f399cb1345fe75e65b2.jpg)
我是Python 3的unicode问题前景的粉丝.但是在一个地方,我不确定它在做什么.
据我所知,argv和环境变量从OS传输到python可执行文件作为字节. Python选择编码,数据作为sys.argv和os.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使用各种系统确定的编码(取自I think LANG)自动解码为Unicode对象,原始字节不直接公开.为了访问它们,我认为或多或少可靠,你可以使用os.fsencode.
我有一种感觉,这可以游戏,但我会在以后跟进.
内容总结
以上是互联网集市为您收集整理的在python中以二进制形式访问系统输入全部内容,希望文章能够帮你解决在python中以二进制形式访问系统输入所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。