[linux] 리눅스 파일 인코딩 확인 및 변경 방법



파일 인코딩 확인 및 변경 방법


1. 파일 인코딩 확인

인코딩 형식 확인 명령어는 대체로 file 명령어에 -bi 옵션을 넣어 사용합니다.

# file -bi 파일명

test.txt 파일은 iso-8859-1로 인코딩되어 있는걸 확인할 수 있습니다.

현재 test.txt 파일은 윈도우에서 한글을 ANSI 인코딩으로 저장하여 scp 명령어로 복사한 파일입니다.
윈도우에서는 한글을 ANSI로 인코딩하면 자동으로 CP949 형식으로 인코딩 한다는데... 왜 리눅스에서는 iso-8859-1로 인식하는지 잘 모르겠네요... (버그로 추정)
아시는 분은 댓글 부탁드립니다... ㅠ


iso-8859-1은 서유럽 언어 인코딩을 지원[1]하기 때문에
한글을 표시할 때 깨지는 문제가 발생하게 됩니다.
(cat 명령어로 test.txt 내용을 출력할 때 복호화 과정을 통해 한글을 복원해야 하는데, 현재 리눅스가 test.txt 파일을 iso-8859-1(서유럽 언어)로 인식하고 있어 한글을 서유럽 형식으로 복호화하여 이상한 문자가 출력)


2. 파일 인코딩 변경

파일 인코딩을 변환하기 위해서는 iconv 명령어를 사용합니다.

파일 인코딩 변환

# iconv -f 기존인코딩포맷 -t 바꿀인코딩포맷 기존파일명 > 바꿀파일명

파일 인코딩이 utf-8로 변경된 것을 확인할 수 있습니다.

인코딩을 변경한 아래의 명령어를 살펴보면

# iconv -c -f iso-8859-1 -t utf-8 test.txt > iso_test.txt

iso-8859-1로 인코딩 된 test.txt 파일을 utf-8로 인코딩하여 iso_test.txt 파일에 새롭게 저장하겠다는 의미입니다.

기존인코딩포맷: iso-8859-1
바꿀인코딩포맷: utf-8
기존파일명: test.txt
바꿀파일명: iso_test.txt


iso_test.txt 파일은 utf-8로 인코딩이 변경되었지만 출력값이 깨져서 나오고 있습니다.

그 이유는 iso-8859-1은 서유럽 언어를 지원하는 인코딩입니다. (한국어 지원 x)
한국어로 인코딩된 test.txt 파일을 서유럽 언어 방식(iso-8859-1)으로 복호화한 뒤, utf-8로 재인코딩 한다는 의미라서 실제 명령어를 실행시키면 한글을 제대로 출력하지 못합니다.

즉. 한국어로 인코딩된 파일은 한국어를 지원하는 형식으로 디코딩(복호화) 해야 하는데 지금은 한국어로 인코딩된 파일을 서유럽 언어를 지원하는 형식으로 디코딩(복호화)해서 utf-8로 인코딩은 제대로 됐지만, 안에 값은 완전 이상한 값들로 들어가 있습니다.


이를 해결하기 위해서는 euc-kr or cp949로 복호화 과정을 거쳐야 합니다.


test.txt 파일을 한국어를 지원하는 cp949로 복호화한 뒤, utf-8로 인코딩을 다시 하여 cp_test.txt 파일을 출력해본 결과 '테스트'라는 파일이 제대로 출력됨을 확인할 수 있습니다.
한국어가 들어간 파일 인코딩을 변경할 때는 꼭 euc-kr or cp949를 이용하셔야 합니다.


만약 UTF8을 ANSI로 변경하고 싶다면

# iconv -f utf-8 -t (euc-kr or cp949) 기존파일명 > 바꿀파일명

※ 인코딩 변경 전 후 파일명을 동일하게하면 안됩니다.



참고문헌

[1] https://docs.python.org/2.4/lib/standard-encodings.html
[2] https://onlywis.tistory.com/2
[3] https://nuli.navercorp.com/sharing/blog/post/1079940

댓글

이 블로그의 인기 게시물

[opencv-python] 이미지 크기조절(resize) 하는 법

[python]파이썬: csv reader header skip (첫번째 행 무시하기, 안읽기)