gpt4 book ai didi

python - shlex.split 仍然不支持 unicode?

转载 作者:太空狗 更新时间:2023-10-29 17:45:01 25 4
gpt4 key购买 nike

根据文档,在 Python 2.7.3 中,shlex 应该支持 UNICODE。但是,当运行下面的代码时,我得到:UnicodeEncodeError: 'ascii' codec can't encode characters in position 184-189: ordinal not in range(128)

我做错了什么吗?

import shlex

command_full = u'software.py -fileA="sequence.fasta" -fileB="新建文本文档.fasta.txt" -output_dir="..." -FORMtitle="tst"'

shlex.split(command_full)

具体错误如下:

Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/shlex.py", line 275, in split
lex = shlex(s, posix=posix)
File "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/shlex.py", line 25, in __init__
instream = StringIO(instream)
UnicodeEncodeError: 'ascii' codec can't encode characters in position 44-49: ordinal not in range(128)

这是我的 mac 使用来自 macports 的 python 的输出。我在使用“ native ”python 2.7.3 的 Ubuntu 机器上遇到完全相同的错误。

最佳答案

shlex.split() 代码将 unicode()str() 实例包装在 StringIO() 对象,它只能处理 Latin-1 字节(因此不是完整的 unicode 代码点范围)。

如果您仍想使用 shlex.split(),则必须进行编码(UTF-8 应该可以);该模块的维护者意味着现在支持 unicode() 对象,只是不支持 Latin-1 代码点范围之外的任何对象。

编码、拆分、解码给我:

>>> map(lambda s: s.decode('UTF8'), shlex.split(command_full.encode('utf8')))
[u'software.py', u'-fileA=sequence.fasta', u'-fileB=\u65b0\u5efa\u6587\u672c\u6587\u6863.fasta.txt', u'-output_dir=...', u'-FORMtitle=tst']

A now closed Python issue试图解决这个问题,但该模块非常面向字节流,并且没有实现新的补丁。目前使用 iso-8859-1UTF-8 编码是我能为您想到的最好的。

关于python - shlex.split 仍然不支持 unicode?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14218992/

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