2012-08-03 8 views
6

मैं निम्नलिखित पायथन स्क्रिप्ट है:लोकेल को इस यूनिकोड एरर को ठीक क्यों नहीं किया जा रहा है?

# -*- coding: utf-8 -*- 
import sys, locale 
locale.setlocale(locale.LC_ALL, 'en_US.utf8') 
print '肥皂' # This works 
print u'肥皂' 

स्क्रिप्ट मैं चलाते समय:

肥皂 
Traceback (most recent call last): 
    File "../pycli/samples/x.py", line 5, in <module> 
    print u'肥皂' 
UnicodeEncodeError: 'latin-1' codec can't encode characters in position 0-1: ordinal not in range(256) 

हालांकि, जब मैं स्पष्ट रूप से खोल में LC_ALL वातावरण चर सेट तो यह काम करता है

export LC_ALL=en_US.utf8 

तो मुझे आश्चर्य है कि setlocale() का एक ही प्रभाव क्यों नहीं है?

+0

क्या आपने 'en_US.utf-8' के साथ प्रयास किया था? –

+0

हाँ मैंने कोशिश की लेकिन उसी परिणाम के साथ – trinth

+0

क्या आपने अपना आउटपुट .encode ('utf-8') करने का प्रयास किया? –

उत्तर

2

मान केवल दुभाषिया स्टार्टअप पर आउटपुट के लिए डिफ़ॉल्ट वर्णसेट निर्दिष्ट करने के लिए उपयोग किया जाता है। दूसरे शब्दों में, स्क्रिप्ट चालू होने और चलने के बाद आप बहुत देर हो चुकी हैं।

+0

उस मामले में, विधि क्यों मौजूद है? ऐसा लगता है कि मेरा एकमात्र विकल्प मैन्युअल रूप से पर्यावरण चर सेट करना है .. – trinth

1

यूनिकोड टेक्स्ट के एक वैचारिक विचार की तरह है जो केवल आपके कार्यक्रम के अंदर मौजूद है।

इसका लाभ यह है कि यह किसी भी चरित्र का समर्थन कर सकता है, लेकिन नुकसान यह है कि यह आउटपुट नहीं हो सकता है और इसलिए कुछ एन्कोडिंग को एन्कोड किया जाना चाहिए जिसे प्रदर्शित किया जा सकता है।

तो, आप कुछ इनपुट चाहते हैं, इसे एन्कोड किया जाएगा और आपको इसे डीकोड करना होगा, और यदि आप यूनिकोड आउटपुट करना चाहते हैं, तो आपको इसे एन्कोड करना होगा।

यदि आप ऐसा नहीं करते हैं, तो पाइथन आपके लिए कोशिश करेगा और आपके लिए ऐसा करेगा (ASCII का उपयोग करके, या आपके मामले में आपके एनवी में क्या पाया जा सकता है), लेकिन आपको इस पर भरोसा नहीं करना चाहिए, क्योंकि पाइथन इसे गलत समझ सकता है (जैसा कि आपके मामले में)।

काफी मज़ेदार, आप देख सकते हैं कि आपके मामले में आपका टर्मिनल utf8 का समर्थन करता है, लेकिन उस पायथन को यह नहीं पता था कि यह utf8 का उपयोग कर सकता है।

यही कारण है कि आप चाहिए हमेशा एनकोड उत्पादन और इनपुट को डिकोड (अधिमानतः UTF8 का उपयोग करते समय संभव!)

आप इस का उपयोग करते हुए यूनिकोड एनकोड विधि और स्ट्रिंग डिकोड विधि, उन्हें तर्क के रूप में एन्कोडिंग दे रही है प्राप्त कर सकते हैं।

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