슬랙으로 하루에 한 문장씩 명언이나 대사를 출력하는걸 만들어봤다.
데이터는 (문장)/(화자) 세트로 하루에 하나씩 순서대로 출력하게 해놨다.
정말 간단하게 Split을 이용해서 문장과 화자를 나누고 (문장)+"\n- "+(화자) 하면 될 줄 알았는데 다른 문제가 생겼다.
데이터는 대충 .txt파일로 저장해놓고 쓰려고 했는데
구글 클라우드 컴퓨터로 가상 머신으로 돌렸는데 ANSI로 지정하니 기존 로컬로 테스트 해볼 때는 발생하지 않던 한글은 저장이 되지 않는 문제가 발생했다.
찾아보니 메모장에서는 인코딩을 지정안하고 default로 지정되어 있는 ANSI로 놓으면 ANSI로 저장되는게 아닌 시스템 로컬을 따라가고 한글 Window에서는 CP949로 저장된다고 한다.
그래서 로컬에서 테스트 해볼 때는 (CP949) 정상동작 했지만 가상 머신은 영문판 Window라 한글이 지원이 되질 않았다.
그래서 메모장 저장을 UTF-8로 하고
file = open('data.txt', 'r', 'utf8') 로 불러왔는데
더 이상하게 변해버렸다. utf-8로 저장한걸 또 utf-8로 불러오려해서 그런가? 하고 인코딩을 지정하는 부분을 빼봐도 똑같다.
더 찾다보니
utf8 or utf-8로 불러오는게 아닌 ISO-8859-1로 불러오면 해결 된다는 글을 보았다.
file = open('data.txt', 'r', 'ISO-8859-1')
로 했는데 왜인지 Fail...
도대체 무엇이 문제인가.
사실 인코딩 문제는 로컬에선 아무문제가 없었고 한글처리에 대한걸 깊게 생각해본적이 없어서 막막했다.
구글신께 도움을 빌어본결과 다른 해결책을 찾았다.
파이썬 자체에 codec이란 모듈을 지원하고 codec이란 메소드를 통해 파일을 읽으면 된다는 내용이였다.
내용을 수정해서
file = codecs.open('data.txt', 'r', encoding='utf8')
그 결과
아주 잘 나온다.
파이썬 기본 모듈인지 pip를 통해 따로 설치할 필요도 없었다.
혹시 utf-8로 읽어온 내용을 다른 인코딩으로 print할 일이 있다면 encode 메소드를 사용하면 된다고 한다.
ex) print text.encode('cp949')
끄읏-
http://word.snu.ac.kr/wiki/doku.php?id=python:cookbook:%EC%9D%B8%EC%BD%94%EB%94%A9%EC%9D%84_%EC%A7%80%EC%A0%95%ED%95%B4_%ED%8C%8C%EC%9D%BC_%EC%9D%BD%EA%B3%A0_%EC%93%B0%EA%B8%B0
'프로그래밍 > 파이썬' 카테고리의 다른 글
[Python] virtualenv (0) | 2020.04.17 |
---|---|
[파이썬] 슬랙 썸네일이미지 (Slack Thumb_url) (3) | 2019.09.26 |