2011-04-08 5 views
1

내가 가진 TXT 문서를 읽을 파이썬을 사용하고 있습니다 :첫 번째 줄이 더 긴 이유는 무엇입니까?

f = open(path,"r") 
for line in f: 
    line = line.decode('utf8').strip() 
    length = len(line) 
    firstLetter = line[:1] 

가 작동하는 것 같다,하지만 첫 번째 줄의 길이가에 의해 항상 ... 예를 들어 1

: 첫 번째 줄을 X는 중국 문자 을 의미입니다 "XXXX"는 다음 길이는 5 할 것이다, 그러나 4 및 firstLetter에 아무것도

수 없습니다하지만 두 번째와 행 다음에 갈 때, 그것은

제대로 작동

tks ~

+0

'ord (firstLetter)'란 무엇입니까? –

+0

65279가 뭐예요? 그것은 정상적인 문자가 아닙니다 – MangMang

+0

아래의 답변 에서처럼 BOM (실제로는 제로 너비의 중단없는 공간)입니다. 인쇄 할 수없는 문자이기 때문에 아무 것도없는 것처럼 보입니다. –

답변

5

입니다. 첫 번째 캐릭터를 조사하는 것에 대해 겁 먹지 마십시오. utf8 인코딩 대신 codecs.open() 또는 your_byte_string.decode()이있는 을 사용하십시오.이 코드는 BOM을 인식하여 코드에 표시되지 않는 경우 BOM을 흡수합니다.

>>> bom8 = u'\ufeff'.encode('utf8') 
>>> bom8 
'\xef\xbb\xbf' 
>>> bom8.decode('utf8') 
u'\ufeff' 
>>> bom8.decode('utf_8_sig') 
u'' # removes the BOM 
>>> 'abcd'.decode('utf_8_sig') 
u'abcd' # doesn't care if no BOM 
>>> 
+0

작동합니다, 감사합니다! – MangMang

5

첫 번째 줄의 첫 번째 문자는 Byte Order Mark (BOM)입니다. 그 처리에 대한

정보는 파일의 시작에서 UTF-8 BOM을 here

+0

죄송합니다. 중국에 있기 때문에 해당 사이트를 열 수 없습니다. Google에서 검색 한 결과 EditPlus는 BOM을 utf8 파일에 추가했습니다. 그래서 설정을 "항상 서명 삭제"로 변경했으나 작동하지 않았습니다 – MangMang

+0

@MangMang, 걱정하지 마십시오.이 사이트는 복잡한 무의미한 코드를 작성하도록 초대합니다 (첫 번째 문자를 직접 확인하십시오). 내 대답을 보라. –

관련 문제