2013-02-07 17 views
8

के साथ मेरे पास बाइट स्ट्रिंग्स (str, unicode नहीं है, पायथन 2.7) में यूनिकोड डेटा (utf-8 एन्कोडिंग में) है।पायथन 2.7 string.join() यूनिकोड

मैं उन्हें ("".join(utf8_strings) या u"".join(utf8_strings) द्वारा) में शामिल होने का जो फेंकता

UnicodeDecodeError: 'ascii' codec can't decode byte 0xec in position 0: ordinal not in range(128)` 

वहाँ गैर- ASCII तार के लिए .join() विधि का उपयोग करने के लिए किसी भी तरह है कोशिश कर रहा हूँ? यकीन है कि मैं उन्हें लूप में जोड़ सकता हूं, लेकिन यह लागत प्रभावी नहीं होगा।

उत्तर

14

''.join() का उपयोग करके बाइट स्ट्रिंग में शामिल होना ठीक काम करता है;

>>> utf8 = [u'\u0123'.encode('utf8'), u'\u0234'.encode('utf8')] 
>>> ''.join(utf8) 
'\xc4\xa3\xc8\xb4' 
>>> u''.join(utf8) 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
UnicodeDecodeError: 'ascii' codec can't decode byte 0xc4 in position 0: ordinal not in range(128) 
>>> ''.join(utf8 + [u'unicode object']) 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
UnicodeDecodeError: 'ascii' codec can't decode byte 0xc4 in position 0: ordinal not in range(128) 

अपवाद से ऊपर उठाया जाता है जब योजक के रूप में यूनिकोड मूल्य u'' उपयोग कर, और करने के लिए तार की सूची में कोई यूनिकोड स्ट्रिंग जोड़ने: त्रुटि आप देख केवल यदि आप मिश्रित unicode और str वस्तुओं प्रकट होता क्रमशः शामिल हों।

+0

तब कोई यूनिकोड' और 'str' ऑब्जेक्ट्स को अन-मिश्रण कैसे करेगा? – fiona

+1

@fiona अपने बाइट तारों को यूनिकोड पर तय करें, फिर शामिल हों। जितनी जल्दी हो सके डीकोड करना सबसे अच्छा है, जब आप पाठ के साथ होते हैं तो केवल एन्कोड करें और इसे किसी ऐसे चीज़ पर पास करना होगा जो केवल बाइट स्वीकार करेगा। –

2

"".join(...) प्रत्येक पैरामीटर str (जो भी एन्कोडिंग हो सकता है) काम करेगा।

जो समस्या आप देख रहे हैं वह शायद शामिल होने से संबंधित नहीं है, लेकिन आपके द्वारा प्रदान की जाने वाली डेटा। अधिक कोड पोस्ट करें ताकि हम देख सकें कि वास्तव में क्या गलत है।

+1

आपकी मदद के लिए धन्यवाद। 'utf8_strings' डेटा 'xlrd' द्वारा लोड किया गया है। 'xlrd', एक शानदार पायथन मॉड्यूल, धन्यवाद 'यूनिकोड' में सभी (गैर-संख्यात्मक) डेटा देता है। मैं उनके साथ परेशान हूं, और ऐसा लगता है कि मैंने उनमें से कुछ को 'str' बनाया है। – thkang

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