2011-12-22 11 views
7

मान लें कियूनिकोड और यूटीएफ -8 एन्कोडिंग के संबंध में पाइथन में `%` -format ऑपरेटर और 'str.format() `के बीच कोई अंतर है?

n = u"Tübingen" 
repr(n) # `T\xfcbingen` # Unicode 
i = 1 # integer 

निम्न फ़ाइलों के पहले फेंकता

UnicodeEncodeError: 'ascii' codec can't encode character u'\xfc' in position 82: ordinal not in range(128) 

जब मैं n.encode('utf8') कर यह काम करता है।

दूसरा मामला दोनों मामलों में निर्दोष काम करता है।

# Python File 1 
# 
#!/usr/bin/env python -B 
# encoding: utf-8 

print '{id}, {name}'.format(id=i, name=n) 

# Python File 2 
# 
#!/usr/bin/env python -B 
# encoding: utf-8 

print '%i, %s'% (i, n) 

दस्तावेज में चूंकि यह % प्रारूप ऑपरेटर के बजाय format() उपयोग करने के लिए, मुझे समझ नहीं आता क्यों format() लगता है और अधिक "handicaped" है प्रोत्साहित किया जाता है। format() केवल utf8 -strings के साथ काम करता है?

+0

जब आपने 'u '{id}, {name}' प्रारूप बनाया था (id = i, name = n) 'आपने क्या देखा? ध्यान दें कि स्वरूपण स्ट्रिंग एक यूनिकोड स्ट्रिंग 'यू' ... ''है। कृपया इसे अपने उदाहरणों में जोड़ें और उस पर टिप्पणी करें। –

+0

धन्यवाद। एसएलओटी, यह था। मैं अब समझता हूं कि मेरी गलती कहाँ थी। '{id}, {name} '' एक utf-8 स्ट्रिंग था (* जादू लाइन * '# एन्कोडिंग द्वारा परिभाषित: utf-8') और' n' यूनिकोड में था। उन्हें "संयोजित" करना संभव नहीं है। यही कारण है कि 'n.encode ('utf8') 'काम किया। सही? – Aufwind

उत्तर

10

आप string.format का उपयोग कर रहे हैं, जबकि आपके पास स्ट्रिंग नहीं है लेकिन unicode ऑब्जेक्ट है।

print u'{id}, {name}'.format(id=i, name=n) 

काम करेगा, क्योंकि यह इसके बजाय unicode.format का उपयोग करता है।