리눅스 파일 캐릭터셋(character set() 확인 및 변환하기

리눅스에서 파일 캐릭터셋을 확인해야 할때가 있죠
file –mime-encoding 파일명
예)
file  –mime-encoding test_erider.co.kr.php
test_erider.co.kr.php: utf-8

파일의 character set 을 변경해야 할때가 있죠.
이렇때 iconv 를 사용합니다.

당연한 얘기지만 iconv 가 설치되어 있어야 실행이 되겠죠.
설치가 안되어 있다면 소스 설치도 좋지만 리눅스 배포판에 맞는 rpm, yum 등의 패키지 관리자를 사용하는게 편합니다.

배포판별 주요 패키지 매니저 (사용법은 조금씩 다르지만 기본 모토는 동일하다)

데비안 : apt-get (Advanced Packaging Tool)

페도라(redhat 계열, CentOS) : yum, rpm

아치 리눅스 : pacman

MAC OS : homebrew, MacPorts

유닉스를 사용하는 매킨토시는 MacPorts 를 쓰다가 요즘은 homebrew 패키지 관리자를 많이 사용합니다.

패키지 관리자 사용법은 간단하니 각자 자신에게 맞는 것을 익혀두기 바랍니다.

사용법
iconv [<옵션> …] [<파일> …]
옵션
-f 인코딩 이름, –from-code=<인코딩 이름> : 원 문서 인코딩 형식
-t 인코딩 이름, –to-code=<인코딩 이름> : 출력 인코딩 형식
-l, –list : 알려진 모든 문자셋 코드를 열거
-c : 출력에서 잘못된 문자를 제외합니다.
-o, –output=FILE : 출력 파일
-s, –silent : 경고를 표시하지 않음
–verbose : 진행 정보를 상세히 표시
-?, –help : 도움말 리스트를 표시
–usage : 간락한 사용법을 표시
-V, –version : 프로그램 버전 표시
utf8 형식의 텍스트 파일을 euckr로 변경시
iconv -f UTF-8 -t eucKR test_utf8.php > test_euckr.php
파일의 charset 변환을 위해 iconv 를 사용한다고 했죠.
그런데 txt 파일이 한개가 아니고 여러개일때 일일이 파일명을 적을 수는 없겠죠
이럴때 다음과 같이 쉘스크립트로 처리하여 한번에 변경 합니다.
#!/bin/bash
for f in *.txt; do
echo $f
iconv -c -f cp949 -t utf-8 $f -o 1$f
done

iconv 가 캐릭터셋 변경에 만능이것 같지만, 간혹 iconv 버전에 따라 변환이 불가능한 문자를 무시하라고 해도 아무련 경고도 없이 변환 불가능한 문자 이전까지 변환되는 문제가 발생하기도 합니다.

그러니 특수한 문자가 많이 들어가 있다면 iconv 로 변환 후 꼭 이상이 없는지 확인을 해볼것을 권합니다.

#리눅스 #명령어 #iconv #Character set #케릭터셋 #캐릭터셋