안녕하세요 황인태입니다.
이번 게시글은 CentOS에서 python3를 이용하여 파일의 encoding 방식을 변경하는 방법에 대해 알려드리겠습니다.
개발을 하다보면 가끔씩 한글이 깨지는 현상이 나타납니다. 저는 주로 linux에서 python으로 한글을 사용해야할 때 자주 발생하였습니다.
이게 다 encoding 때문이였습니다.
저희 회사의 OS는 다음과 같습니다.
- 로컬 pc : windows10
- 개발서버 : CentOS 7
(맥북으로 바꿔주세요 대표님!)
1. encoding
한글이 깨지는 원인은 encoding에 있습니다. 글자를 표현하는 방법에 조합형과 완성형이 있고 아스키랑 ANSI는 뭐고... 사실 이런거는 잘 모르겠고 대부분이 utf-8과 euc-kr의 문제 입니다. "그렇다면 파일을 오픈할때 UTF-8로 read하면 되잖아요!"
네 맞아요 그렇게 하면 됩니다. ms excel에서 깨지게 보이는거지 vscode로 open하면 문제 없습니다. 근데 확장자가 csv말고 xlsx인데 인코딩이 깨진다면...?
2. code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
def cal(extend, title, fileStreNm, dirPath):
if (extend == "csv") or (extend == "xlsx") or (extend == "xls"):
rootPath = dirPath
before = rootPath + fileStreNm
after = rootPath + fileStreNm + "." + extend
# charSet 확인
chkCharset = subprocess.check_output("file -i " + before, shell=True, encoding='utf-8')
chkCharset = str(chkCharset)
chkCharset = chkCharset.replace("text/plain; charset=", "").strip()
fileNames = ""
if chkCharset == "iso-8859-1":
os.system("iconv -c -f euc-kr -t utf-8 " + before + " > " + after)
os.remove(before)
fileNames = glob.glob(after)
print("iso-8859-1(euc-kr) to utf-8")
else:
print(chkCharset)
os.rename(before, after)
fileNames = glob.glob(after)
|
cs |
제가 작성한 소스코드의 일부분을 보시면 python3에서 shell 명령어를 실행하기 위해 2 가지 방법을 사용하였는데요. line 9의 subprocess lib와 line 15의 os lib 입니다. 둘다 동일하게 shell 명령어를 실행할 수 있지만 subprocess의 check_output을 사용하면 실행 결과를 문자열로 return 받을 수 있습니다.
line 14에 보시면 iso-8859-1 일때 euc-kr에서 utf-8로 변환하라는 코드입니다. iso-8859-1인데 euc-kr로 변환을 하는지 의문이 생길 수 있는데요 결과부터 알려드리자면 실제로 iso-8859-1를 utf-8로 변환을 하면 여전히 폰트가 깨집니다.
아니 왜 나에게 이런 시련이...
그래서 과정에 오류가 있나 돌아가 보면 과연 file 명령어로 케릭터셋을 확인했을 때, ios-8859-1이 맞는지 확인이 필요 했습니다. vscode로 인코딩을 변경하다 보니
file 명령어로 ios-8859-1로 확인된 케릭터 셋이 vscode에서는 euc-kr로 추측하고 있습니다.
어라? 그럼 한번 euc-kr로 해봐? 라는 생각으로 작성한 코드입니다.
논리적인 방법은 아니지만 글이 상당히 길어질거 같고 깊이가 있는 내용으로 예상되어 ios-8859-1 과 euc-kr의 관계에 대해서는 따로 공부하고 올리는 것으로 해야할거 같습니다.
'python' 카테고리의 다른 글
python3와 selenium을 이용하여 javaScript 함수 호출하기 (0) | 2021.12.14 |
---|---|
python3으로 CSV 파일 만들기 (0) | 2021.12.14 |
[공공데이터포털 크롤링] data.go.kr 공공데이터포털 크롤링하기 (4) (0) | 2021.03.10 |
[공공데이터포털 크롤링] data.go.kr 공공데이터포털 크롤링하기 (3) (0) | 2021.01.24 |
[공공데이터포털 크롤링] data.go.kr 공공데이터포털 크롤링하기 (2) (0) | 2021.01.24 |
댓글