2013-01-08 25 views
10

प्रलेखन के अनुसार, पायथन 2.7.3 में, शेलेक्स को यूनिकोड का समर्थन करना चाहिए। हालांकि, नीचे दिए गए कोड को चलाने पर, मुझे मिलता है: UnicodeEncodeError: 'ascii' codec can't encode characters in position 184-189: ordinal not in range(128)shlex.split अभी भी यूनिकोड का समर्थन नहीं कर रहा है?

क्या मैं कुछ गलत कर रहा हूं?

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) 

इस से मेरी मैक macports से अजगर का उपयोग कर उत्पादन होता है। मुझे उबंटू मशीन पर "मूल" पायथन 2.7.3 के साथ बिल्कुल वही त्रुटि मिल रही है।

+0

यह 'यूनिकोड()' वस्तु का समर्थन नहीं किया; यह 'यूनिकोड()' ऑब्जेक्ट का उपयोग करते समय भी ASCII वर्णों के अलावा कुछ भी संभाल नहीं सकता है। –

+0

@MartijnPieters एक बग या अपेक्षित व्यवहार है? मुझे प्रलेखन – petr

+0

ज्ञात बग में प्रतिबंध के लिए कोई संदर्भ नहीं मिला, मैं कहूंगा, [यह समस्या] देखें (http://bugs.python.org/issue742290)। –

उत्तर

11

shlex.split() कोड एक StringIO() वस्तु में दोनों unicode() और str() उदाहरणों, जो केवल लैटिन -1 बाइट (ऐसा नहीं पूर्ण यूनिकोड कोडपॉइंट रेंज) संभाल कर सकते हैं गिर्द घूमती है।

यदि आप अभी भी shlex.split() का उपयोग करना चाहते हैं तो आपको एन्कोड करना होगा (यूटीएफ -8 को काम करना चाहिए); मॉड्यूल के रखरखाव का मतलब है कि unicode() ऑब्जेक्ट्स अब समर्थित हैं, लैटिन -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'] 

एक now closed Python issue इसके समाधान के लिए कोशिश की, लेकिन मॉड्यूल बहुत बाइट धारा उन्मुख है, और कोई नया पैच materialized है। अब iso-8859-1 या UTF-8 एन्कोडिंग का उपयोग करने के लिए सबसे अच्छा मैं आपके साथ आ सकता हूं।

2

असल में पांच साल से अधिक समय तक पैच रहा है। पिछले साल मैं हर परियोजना के लिहाज से एक ushlex कॉपी करने से थक गया और PyPI पर डाल दिया:

https://pypi.python.org/pypi/ushlex/

संबंधित मुद्दे