2012-04-29 6 views
5

저는 python 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

왜 문자를 한 줄씩 출력합니까? 왜 단순히'for line in f : print line'을 말하는 것이 아닌가? 내가 그랬을 때 "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

그것은 터미널 인코딩입니다. 파일에서 사용중인 인코딩과 동일한 인코딩으로 터미널을 구성하십시오. 나는 UTF-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에서 UTF-8 표준을 만드는 이유를 알 수 있습니다. (PEP 3120) – mgold

+2

@mgold : PEP 3120은 모두 소스 (.py) 파일의 인코딩에 관한 것입니다. 그것은 입력 및/또는 출력의 인코딩에 대한 OP의 문제와 관련이 없습니다. –

+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'))