텍스트 분할기를 만들다 보니 역시 텍스트 관련 프로그램에서 늘 접하게 되는 인코딩 오류를 접하게 됐다.
그래서 사실 프로그램에서 파일을 열면 첫 100줄정도를 읽어서
텍스트 첫부분이라도 어떤 형태로 인코딩 된 건지를 알아보도록 기능을 넣기는 했다.
UTF-8 BOM 출력 오류
텍스트를 분할하기 위해 원본 파일을 읽어 왔다.
흔히들 많이 쓰이는 코드를 사용했다.
with open(filename, mode="r", encoding="utf-8") as file:
return file.readlines()
그런데 readlines()로 가져온 결과물들을 처리하는 부분에서 exception 이 발생했었다.
UnicodeEncodeError: 'ascii' codec can't encode character u'\ufeff' in position 155: ordinal not in range(128)
이유는 윈도우에서 utf-8로 텍스트 파일을 작성하면 파일의 가장 첫 부분에 bom(byte order mask)를 자동으로 붙이는데, 이 bom을 출력하려고 하니 문제가 발생하는 거라고 한다.
해결방법 1
가장 간단한 방법으로 파일을 열 때 encoding 파라미터다 utf-8-sig 를 지정해준다.
with open(filename, mode="r", encoding="utf-8-sig") as file:
해결방법 2
utf-8로 파일을 읽고, 파일의 첫 부분에 bom이 있을 경우 이를 제거한다.
유닉스 계열의 텍스트 편집기는 bom을 사용하지 않는 경우가 많다고 하니, 유닉스 계열 파일 처리할 때도 같이 사용 가능할 것 같아 좋은 방법이라 생각된다.
실제로 해당 코드를 적용해서 회차분할기를 완성해놓은 상태이다.
with open(filename, mode="r", encoding="utf-8") as file:
lines = file.readlines()
if len(lines) != 0:
lines[0] = lines[0].replace(u"\ufeff", '')
둘 다 좋은 방법 같다.
반응형
'IT, Software > Python' 카테고리의 다른 글
Python - Scene Detector 만들기 첫단계 OpenCV 설치하기 (0) | 2021.04.17 |
---|---|
Python chardet 모듈 활용 웹사이트, 문장단위 텍스트 인코딩 타입 확인하기 (0) | 2021.03.15 |
특정 문자열을 찾아 텍스트 분할하는 어플 - Blice Text Splitter (2) | 2021.02.15 |
Pycharm에서 Github에 Repository생성, 소스 업로드하기 (0) | 2021.02.10 |
Python Pycharm(파이참)에서 Github 연동하기 (0) | 2021.02.08 |
댓글