2017-05-18 10 views
2

여기에서 파일 'pi_million_digits.txt'다운로드 :가 내 데이터에 나타나는 이유는 무엇입니까?

https://github.com/ehmatthes/pcc/blob/master/chapter_10/pi_million_digits.txt

은 그때 열고 읽어이 코드를 사용을 : 생산 출력이 떨어져 올 그러나

filename = 'pi_million_digits.txt' 

with open(filename) as file_object: 
    lines = file_object.readlines() 

pi_string = '' 
for line in lines: 
    pi_string += line.strip() 

print(pi_string[:52] + "...") 
print(len(pi_string)) 

실제로 그것은 이상한 기호가 앞에 붙습니다 : "§ 3.141 ...."

이 이상한 기호의 원인은 무엇입니까? 나는 그런 기호가 제거되기를 기대하기 위해 줄을 벗겨 내고있다.

+1

파일이 손상되었을 수 있습니다. –

+0

텍스트 편집기에서 파일을 보았습니다. 정상적으로 보입니까? 그것은 텍스트 편집기에서 괜찮아 보여도 여전히 손상되었을 수 있습니까? – Bazman

답변

3

ISO-8859-1 인코딩을 사용하여 UTF-8로 인코딩 된 파일 (예 : OS의 기본 인코딩이기 때문에)을 여는 것처럼 보입니다. 당신이 바이트로 열고 첫 번째 줄을 읽는다면

,이 같은 내용을 볼 수있을 것이다 \xef\xbb\xbf는 BOM의 UTF-8 인코딩입니다

>>> next(open('pi_million_digits.txt', 'rb')) 
b'\xef\xbb\xbf3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679\n' 

....

>>> next(open('pi_million_digits.txt', encoding='utf-8')) 
'\ufeff3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679\n' 

제거하려면 : UTF-8

>>> next(open('pi_million_digits.txt', encoding='iso-8859-1')) 
'3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679\n' 

... 개방이 실제 BOM 문자 U + FEFF을 보여줍니다 ISO-8859-1로 개설, 그것은 당신이 얻고있는 것 같습니다

>>> next(open('pi_million_digits.txt', encoding='utf-8-sig')) 
'3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679\n' 

예에서 next()의 사용은 위의 단지 데모 목적입니다 : 밖으로 마크, 특별한 인코딩 utf-8-sig를 사용합니다. 코드에서 open() 행에 encoding 인수를 추가하기 만하면됩니다 (예 :

with open(filename, encoding='utf-8-sig') as file_object: 
    # ... etc. 
+1

대단히 감사합니다. – Bazman