2012-04-29 20 views
5

मैं अजगर 2.7 का उपयोग कर रहा हूं। मैंने कोडेक्स जैसी कई चीजों की कोशिश की है लेकिन काम नहीं किया है। मैं इसे कैसे ठीक करूं।टेक्स्ट फ़ाइल से गैर-ASCII वर्ण पढ़ना

myfile.txt

wörd 

मेरे कोड

f = open('myfile.txt','r') 
for line in f: 
    print line 
f.close() 

आउटपुट

s\xc3\xb6zc\xc3\xbck 

आउटपुट ग्रहण और कमांड विंडो पर ही है। मैं Win7 का उपयोग कर रहा हूँ। जब मैं किसी फ़ाइल से नहीं पढ़ता तो किसी भी वर्ण के साथ कोई समस्या नहीं है। सब से

+3

क्या परिणाम आप उम्मीद कर रहे हैं:

वैसे, डिकोड एन्कोड करने के लिए सभी अपने इनपुट-आउटपुट समस्याओं से बचने के लिए एक अच्छा अभ्यास है? तकनीकी रूप से बोलते हुए, पायथन ने फ़ाइल को सही ढंग से पढ़ा है। – srgerg

+0

आप चरित्र चरित्र से चरित्र चरित्र क्यों मुद्रित करते हैं? क्यों नहीं 'एफ में लाइन के लिए: प्रिंट लाइन' कहें? जब मैंने ऐसा किया, तो उसने वांछित के रूप में "söcük" मुद्रित किया। – srgerg

+0

मैंने कोशिश की लेकिन काम नहीं करता है। यह एस \ xc3 \ xb6zc \ xc3 \ xbck मुद्रित। – Rckt

उत्तर

7
  1. पहले - तो एन्कोडिंग

    from chardet import detect 
    encoding = lambda x: detect(x)['encoding'] 
    print encoding(line) 
  1. का पता लगाने - यह यूनिकोड या अपने डिफ़ॉल्ट एन्कोडिंग str कन्वर्ट:

    n_line=unicode(line,encoding(line),errors='ignore') 
    print n_line 
    print n_line.encode('utf8') 
1

यह टर्मिनल एन्कोडिंग है। अपने टर्मिनल को उसी फ़ाइल के साथ कॉन्फ़िगर करने का प्रयास करें जो आप अपनी फ़ाइल में उपयोग कर रहे हैं। मैं आपको यूटीएफ -8 का उपयोग करने की सलाह देता हूं।

f = open('test.txt','r')  
for line in f: 
    l = unicode(line, encoding='utf-8')# decode the input                     
    print l.encode('utf-8') # encode the output                        
f.close() 
+0

अब मैं देखता हूं कि वे 3.0 में यूटीएफ -8 मानक क्यों बना रहे हैं। (पीईपी 3120) – mgold

+2

@mgold: पीईपी 3120 स्रोत (.py) फ़ाइल के एन्कोडिंग के बारे में है; इनपुट और/या आउटपुट के एन्कोडिंग के साथ ओपी की समस्या से कोई लेना देना नहीं है। –

+0

ओह। अच्छी पकड़। – mgold

7
import codecs 
#open it with utf-8 encoding 
f=codecs.open("myfile.txt","r",encoding='utf-8') 
#read the file to unicode string 
sfile=f.read() 

#check the encoding type 
print type(file) #it's unicode 

#unicode should be encoded to standard string to display it properly 
print sfile.encode('utf-8') 
#check the type of encoded string 

print type(sfile.encode('utf-8')) 
संबंधित मुद्दे