मैं स्ट्रिंग मान पुनर्प्राप्त करने के लिए OptParse
मॉड्यूल का उपयोग कर रहा हूं। OptParse
only supports str
typed strings, unicode
वाले नहीं।गैर-ASCII वर्णों के साथ स्ट्रिंग्स को ऑप्टपर्स के साथ कैसे पुनर्प्राप्त किया जा सकता है?
तो चलो कहते हैं कि मैं मेरी स्क्रिप्ट शुरू करते हैं साथ:
UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 99: ordinal not in range(128)
मैं:
जैसे 'ई', आपके द्वारा लिखा गया जा रहाstr
, ट्रिगर
UnicodeDecodeError
रों जब कोड में पढ़ा
./someScript --some-option ééééé
फ्रेंच वर्ण, यूनिकोड बिल्ट-इन फ़ंक्शन के साथ थोड़ा सा खेला जाता है, लेकिन या तो मुझे कोई त्रुटि मिलती है, या चरित्र गायब हो जाता है:
>>> unicode('é');
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 0: ordinal not in range(128)
>>> unicode('é', errors='ignore');
u''
क्या का उपयोग करने के लिए मैं कुछ भी कर सकता हूं unicode
/utf-8
तारों को पुनर्प्राप्त करने के लिए?
अद्यतन:
ऐसा लगता है कि स्ट्रिंग लिया गया और ठीक मुद्रित किया जा सकता है, लेकिन फिर मैं SQLite के साथ कि स्ट्रिंग (APSW मॉड्यूल का उपयोग करके) इस्तेमाल करने की कोशिश, और इसके साथ किसी भी तरह यूनिकोड में बदलने की कोशिश करता है cursor.execute("...")
, और तब त्रुटि होती है।
#!/usr/bin/python
# coding: utf-8
import os, sys, optparse
parser = optparse.OptionParser()
parser.add_option("--some-option")
(opts, args) = parser.parse_args()
print unicode(opts.some_option)
स्ट्र ऑब्जेक्ट्स केवल बाइट स्टोर्स हैं इसलिए यदि इनपुट यूटीएफ -8 है, तो स्ट्रिंग यूटीएफ -8 मान रखेगी। यूनिकोड त्रुटि कहाँ फेंक दी जा रही है? –
मैंने अभी यूटीएफ -8 कंसोल पर इसका परीक्षण किया है और ऑप्टपरसे ठीक काम करता है और चरित्र को कंसोल पर लौटाता है। क्या आप यह स्पष्ट कर सकते हैं कि यह त्रुटि आपके कोड में है या ऑप्टपर में है? –
आपके प्रोग्राम को ऑप्टपर पर निर्भर करता है या आप स्क्रैच से बना रहे हैं? उस स्थिति में मैं optparse के बजाय docopts पैकेज की सिफारिश करेंगे। आप वाकई वास्तव में आश्चर्यचकित होंगे कि यह क्ली तर्कों को कितना आसान बनाता है। – Bruce