2011-08-07 16 views
9


मैं जापानी शब्द और पात्रों के बारे में जानकारी युक्त दो अजगर शब्दकोशों है:
यूनिकोड तार के माध्यम से दोहराएं और अजगर शब्दकोश में यूनिकोड के साथ तुलना

  1. vocabDic: शब्द, मूल्य:: शब्दावली, कुंजी है जानकारी के साथ शब्दकोश के बारे में यह
  2. KANJIDIC: कांजी, मूल्य:: कांजी (एकल जापानी चरित्र), कुंजी है यह

    अब के बारे में जानकारी के साथ शब्दकोश मैं throug पुनरावृति करना चाहते हैं h vocabDic में प्रत्येक शब्द के प्रत्येक चरित्र और इस चरित्र को कांजी शब्दकोश में देखें। मेरा लक्ष्य एक सीएसवी फ़ाइल बनाना है जिसे मैं शब्दावली और कांजी के लिए तालिका में शामिल होने के रूप में डेटाबेस में आयात कर सकता हूं।

    kanjiVocabJoinWriter = csv.writer(open('kanjiVocabJoin.csv', 'wb'), delimiter=',', quotechar='|', quoting=csv.QUOTE_MINIMAL) 
    kanjiVocabJoinCount = 1 
    
    #loop through dictionary 
    for key, val in vocabDic.iteritems(): 
        if val['lang'] is 'jpn': # only check japanese words 
         vocab = val['text'] 
         print vocab 
         # loop through vocab string 
         for v in vocab: 
          test = kanjiDic.get(v) 
          print v 
          print test 
          if test is not None: 
           print str(kanjiVocabJoinCount)+','+str(test['id'])+','+str(val['id']) 
           kanjiVocabJoinWriter([str(kanjiVocabJoinCount),str(test['id']),str(val['id'])]) 
           kanjiVocabJoinCount = kanjiVocabJoinCount+1 
    

अगर मैं कमांड लाइन करने के लिए चर मुद्रित, मैं:
vocab: काम करता है, जापानी
में प्रिंट
मेरे अजगर संस्करण 2.6
मेरे कोड निम्नलिखित के रूप में है v (लूप के लिए vocab का एक चरित्र):
परीक्षण (चरित्र कांजीजीक में देखा गया): कोई भी

मेरे लिए ऐसा लगता है जैसे लूप एन्कोडिंग को गड़बड़ कर देता है।
मैंने विभिन्न कार्यों (डीकोड, एनकोड ..) की कोशिश की लेकिन अब तक कोई भाग्य नहीं है।
इस पर कोई विचार है कि मैं यह कैसे काम कर सकता हूं?
सहायता बहुत सराहना की जाएगी।

+2

क्या आप पाइथन 3 का उपयोग कर सकते हैं - इसका यूनिकोड बेहतर – Mark

+1

या '__future__ आयात unicode_literals' से बेहतर है? – utdemir

+0

आपको बहुत बहुत धन्यवाद! पायथन 3 को अपडेट करने से समस्या हल हो गई: डी – daniela

उत्तर

11

समस्या के आपके विवरण से, ऐसा लगता है कि vocabstr ऑब्जेक्ट एन्कोडेड है, unicode ऑब्जेक्ट नहीं।

स्थूलता के लिए, vocab के बराबर होती है u'債務の天井'utf-8 में एन्कोड लगता है:

In [42]: v=u'債務の天井' 
In [43]: vocab=v.encode('utf-8') # val['text'] 
Out[43]: '\xe5\x82\xb5\xe5\x8b\x99\xe3\x81\xae\xe5\xa4\xa9\xe4\xba\x95' 

आप पाश इनकोडिंग str वस्तु पर, आप एक बाइट एक समय में मिलता है: \xe5, तो \x82, तो \xb5, आदि

हालांकि यदि आप यूनिकोड ऑब्जेक्ट पर लूप करते हैं, तो आपको एक समय में एक यूनिकोड वर्ण मिलेगा:

In [45]: for v in u'債務の天井': 
    ....:  print(v)  
債 
務 
の 
天 
井 

ध्यान दें कि पहले यूनिकोड चरित्र, utf-8 में इनकोडिंग, 3 बाइट्स:

In [49]: u'債'.encode('utf-8') 
Out[49]: '\xe5\x82\xb5' 

क्यों बाइट्स से अधिक पाशन, एक समय में एक बाइट मुद्रण, है यही कारण है कि (जैसे print \xe5) एक पहचानने योग्य चरित्र मुद्रित करने में विफल रहता है।

तो ऐसा लगता है कि आपको str ऑब्जेक्ट्स को डीकोड करने और unicode ऑब्जेक्ट्स के साथ काम करने की आवश्यकता है। आपने उल्लेख नहीं किया है कि आप अपने str ऑब्जेक्ट्स के लिए किस एन्कोडिंग का उपयोग कर रहे हैं।यदि यह utf-8 है, तो आप इसे इस तरह डिकोड चाहते हैं:

vocab=val['text'].decode('utf-8') 

क्या आप वाकई क्या एन्कोडिंग val['text'] में है,

print(repr(vocab)) 

के उत्पादन में पोस्ट नहीं कर रहे हैं और शायद हम एन्कोडिंग अनुमान लगा सकते हैं ।

+0

आपके लंबे स्पष्टीकरण के लिए बहुत बहुत धन्यवाद! इससे मुझे समझने में मदद मिली कि पाइथन यूनिकोड को कैसे संभालता है। :) – daniela

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