본문 바로가기

어쩌다 가끔 쓸 일이 생기는 인코딩 변환기 iconv

기술적인 이야기/터미널 및 셸 2020. 1. 21.
반응형

윈도가 아닌 OS를 쓰다 보면 가끔 한글이 깨지는 문제를 겪을 때가 있습니다. 예를 들어 맥에서 작성한 파일을 윈도에서 열어보면 깨져서 보인다거나 윈도에서 작성한 텍스트를 맥에서 열어보면 깨진다거나 등등 말이지요. 물론 이는 전적으로 아직도 구식 한글셋을 사용하는 윈도의 잘못(?)으로 봐야겠지만 어쨌든 한국에서는 윈도 사용자가 압도적으로 많으니 이에 맞춰야겠지요.

이 경우 사용할 수 있는 리눅스나 macOS 빌트인 도구로 iconv를 사용할 수 있습니다. 별도의 GUI는 없는 CLI 유틸리티입니다.

Convert UTF-8 to euc-kr(cp949)

UTF-8으로 작성된 특정 텍스트 파일을 euc-kr(혹은 CP949 등 윈도에서 사용하는 한글 인코딩)로 바꾸려면 아래와 같은 식으로 이용할 수 있습니다.

iconv -c -f utf-8 -t euc-kr FILENAME > OUTPUT_FILE

각 옵션을 간략히 설명하면 아래와 같습니다.

  • -c: 인코딩 불가능한 문자는 무시하기
  • -f: 바꾸기 전의 인코딩(from)
  • -t: 바꾸려는 인코딩(to)

별도의 파일로 출력하는 옵션은 없기 때문에 간단히 파이프로 파일에 쓰는 *NIX 스러운 방법으로 파일에 쓸 수 있습니다.

위에도 적어놨지만 -c 옵션은 인코딩이 불가능한 문자를 무시하라는 의미입니다. 변환 불가능한 문자가 포함되어 있는 경우 에러가 나면서 멈추기 때문에 그냥 무시하고 싶을 때 사용하는 커맨드입니다. euc-kr(cp949)의 경우 과거 완성형 한글 스펙에서 유래한 인코딩이기 때문에 옛한글 등 표현하지 못하는 문자가 많기 때문에 문제가 생길 가능성이 있으므로 이 경우 에러를 무시하고 계속 진행하기 위해서 주로 사용합니다.

당연하겠지만, 윈도에서 작성된 파일을 맥에서 열었을 때 깨진다면 -t-f 옵션 인자를 반대로 주면 되겠지요.

iconv -c -f euc-kr -t utf-8 FILENAME > OUTPUT_FILE

특정 OS의 경우 euc-kr 대신 cp949로 표현해야 하는 경우도 있으니 주의합시다.

이 외에 파일을 변환하는 게 아니라 텍스트 스트림을 파이프로 변환하는 것도 당연히 가능합니다. 글 제일 위에 첨부한 스크린샷이 그 방식의 예제입니다. 아무래도 특정 앱에서는 popen 등을 이용해 파이프를 통해 iconv를 자주 사용하게 될 테이니 참고합시다.

728x90
반응형

댓글