2014-12-01 5 views
2

BeautifulSoup에 인코딩 문제가 있습니다. 제 개발 환경에서는 모든 것이 잘 작동합니다 (Ubuntu, Python 3.4, Django 개발 서버). - 프로덕션 서버에서 내가 할 (우분투, 파이썬 3.4, 장고와 BeautifulSoup로의 동일한 버전의 유일한 차이점은 gunicorn와 Nginx에의 사용이다) :BeautifulSoup, Python 3, 인코딩 오류

'ascii' codec can't decode byte 0xc3 in position 301: ordinal not in range(128) 

트랙백 문제가 (문 "BeautifulSoup로에 있음을 보여줍니다 데이터)".

data = open(os.path.join(BASE_DIR, 'data/file.xml')) 
data = BeautifulSoup(data) 

그것은 것 같은 BeautifulSoup로는 ASCII를 사용하려고하지만 파일이 UTF-8로 인코딩 된 경우. 나는 여기 스택 오버 플로우에서 찾을 수있는 다른 방법을 시도했지만 대부분은 파이썬 2에 의존 -하지만 난 또한 같은 시도 파이썬 3. 사용

data = BeautifulSoup(str(data.read())) 

을하지만 그건 작동하지 않습니다.

모든 도움을 주시면 대단히 감사하겠습니다.

+0

인코딩 오류가 없습니다. * de * 코딩 오류가 있습니다. –

답변

0

인코딩 오류가 없습니다. 코딩 오류가 있습니다. 그리고 실제로 여기에 결함이있는 것은 open() 호출입니다. 인코딩을 지정하지 않았으므로 시스템 기본값이 사용되고 시스템의 기본값은 ASCII입니다.

당신은 바이트에서 BeautifulSoup로 전달하려는 :

with open(os.path.join(BASE_DIR, 'data/file.xml'), 'rb') as datafile: 
    data = BeautifulSoup(datafile) 

BeautifulSoup로 아웃에 거기에서 디코딩 처리됩니다. 또한 파일 처리를 with 문으로 변경했습니다. 파일 개체는 컨텍스트 관리자이므로이 경우 모든 상황에서 적절하게 닫힙니다.

당신이 XML하지 HTML을 개방하고 있기 때문에, 당신은 아마의 BeautifulSoup로 통보 할 :

with open(os.path.join(BASE_DIR, 'data/file.xml'), 'rb') as datafile: 
    data = BeautifulSoup(datafile, 'xml') 

당신은 제대로 작동하려면이 설치된 LXML이 필요합니다.

+0

도움 주셔서 감사합니다. open() 문을 "open (os.path.join (BASE_DIR, 'data/file.xml'), encoding ="utf-8 ")으로 변경하면 트릭을 수행했습니다. – user2496550

+0

@ user2496550 : 여전히 해설을 BeautifulSoup로 남겨 둘 수 있습니다. XML 파일은 UTF-8에서 벗어나면 태그에 인코딩을 포함합니다. –

+0

내 XML 파일에 ""이 있습니다. "BeautifulSoup (datafile, 'xml')"을 사용하면 "여전히 오류가 발생합니다. open()의 "encoding ="utf-8 ""만이 저에게 효과적입니다. – user2496550