【发布时间】:2011-10-22 08:02:17
【问题描述】:
由于 Python 3k 引入了字符串和字节之间的严格区分,数组 sys.argv 中的命令行参数以字符串形式呈现。有时有必要将参数视为字节,例如当传递不需要在 Unix 中采用任何特定字符编码的路径时。
让我们看一个例子。一个简短的 Python 3k 程序argv.py 如下:
import sys
print(sys.argv[1])
print(b'bytes')
当它以python3.1 argv.py français 执行时,它会产生预期的输出:
法语
b'字节'
请注意,参数 français 在我的语言环境编码中。但是,当我们以不同的编码传递参数时,我们会得到一个错误:python3.1 argv.py `echo français|iconv -t latin1`
Traceback (most recent call last):
File "argv.py", line 3, in <module>
print(sys.argv[1])
UnicodeEncodeError: 'utf-8' codec can't encode character '\udce7' in position 4: surrogates not allowed
我们如何通过命令行参数将二进制数据传递给 Python 3k 程序?一个使用示例是将路径传递给使用其他语言环境的用户的文件。
【问题讨论】:
-
编码问题误导了答案,我建议
python3 argv.py `echo -ne "\xff\x80\x00"`这是«通过命令行参数传递二进制数据»的示例
标签: python string unicode python-3.x