2009-12-07 5 views
3

Excel에서 UTF-8 텍스트를 내보내는 중이고 파이썬을 사용하여 들어오는 데이터를 읽고 구문 분석하려고합니다.파이썬 : 유니 코드 utf-8 텍스트 파일을 읽고 구문 분석하려면 어떻게해야합니까?

txtFile = codecs.open('halout.txt', 'r', 'utf-8') 
for line in txtFile: 
    print repr(line) 

내가 점점 오전 오류는 다음과 같습니다 :

UnicodeDecodeError : 'UTF8'코덱에 바이트를 0xFF를 디코딩 할 수없는 이미 예를 들어,이 시도했습니다, 그래서 나는 모든 온라인 정보를 읽었습니다 위치 0 :

txtFile.seek(2) 

은 '개방'하지만 그건 단지 디 발생 직후 : 16 진수 편집기에서 텍스트 파일을 보면 예기치 않은 코드 바이트

첫 번째 값이 나는 또한 시도했다 FFFE입니다 fferent 오류.

+2

어쨌든 내보내는 텍스트가 UTF-8 * 인코딩 *에 없지만 UTF-16과 같은 다른 유니 코드 인코딩에있을 수 있습니다. 이들은 모두 별개입니다. 이 주제에 대해 알아야 할 것이 많습니다! 이 두 가지를 모두 읽는다면 결코 전에와 같이 이것을 마스터하게 될 것입니다 : http://www.joelonsoftware.com/articles/Unicode.html http://www.amk.ca/python/howto/unicode – u0b34a0f6ae

답변

2

는 감동적인에서,이 UTF-16 BOM

codecs.open('foo.txt', 'r', 'utf-16') 

일을해야 될 것으로 보인다. 조나단의 의견에 확장

+0

링크 된 Wikipedia 페이지에서 : "BOM의 UTF-8 표현은 바이트 시퀀스 EF BB BF"입니다. 따라서 파일이 UTF-8이 아닙니다 (OP는 FFFE를 볼 수 있기 때문에 UTF-16입니다). 리틀 엔디 언 순서로). – jfs

+0

실패 : "UnicodeDecodeError : 'utf8'코덱이 0 위치의 바이트 0xff을 디코딩 할 수 없습니다 : 예상치 못한 코드 바이트" –

5

해당 파일은 UTF-8이 아닙니다. 그것은 UTF-16LE with a byte-order marker입니다. BOM

편집이

+1

놀라운 정신력이 거기에 있습니다. ! –

+1

처음 2 바이트 만 사용하여 UTF-16LE과 UTF-32LE을 어떻게 구별합니까? – jfs

+0

좋은 지적; 하나는 할 수 없다. 필자는 파일에서 UTF-32를 발견 한 적이 없지만 필자는 그것이 일어 났을 것이라고 확신한다. 일단. 균열에. –

1

,이 코드는 파일을 제대로 읽어야 엑셀 파일이 일부 빈 행이 (다음 다시 값을 가지는 경우)

import codecs 
txtFile = codecs.open('halout.txt', 'r', 'utf-16') 
for line in txtFile: 
    print repr(line) 
0

시도가 예기치 않은 오류가 발생할 수 있습니다 볼 수 있습니다.

관련 문제