각기 다른 개발환경 및 에디터등에서 코딩 및 저장된 파일들은 의도치 않게 원치 않는 인코딩 상태로 서버에 배포되는 경우가 있다.
이는 곧 Apache, Tomcat 등 WEB/WAS Aplicaiton Server의 Charset 설정 환경등에 의해 경우에 따라 파일 인코딩 문제로 이어질 수 있다.
이때 아래와 같이 Linux 에서 제공하는 recode Util과 간단한 Shell Script 를 활용한다면 쉽게 해결 할 수 있을 것이다.
1. recode Util 설치
[root@Test01 shell]# [root@Test01 shell]# yum -y install recode Loaded plugins: allowdowngrade, downloadonly, fastestmirror, priorities, security Loading mirror speeds from cached hostfile * base: ftp.neowiz.com * extras: ftp.neowiz.com * rpmforge: ftp.riken.jp * updates: ftp.neowiz.com base | 1.1 kB 00:00 extras | 2.1 kB 00:00 rpmforge | 1.9 kB 00:00 updates | 1.9 kB 00:00 updates/primary_db | 700 kB 00:00 Setting up Install Process Resolving Dependencies --> Running transaction check ---> Package recode.x86_64 0:3.6-22.el5.centos set to be updated --> Finished Dependency Resolution
Dependencies Resolved
================================================================================================ Package Arch Version Repository Size ================================================================================================ Installing: recode x86_64 3.6-22.el5.centos extras 900 k
Transaction Summary ================================================================================================ Install 1 Package(s) Upgrade 0 Package(s)
Total download size: 900 k Downloading Packages: recode-3.6-22.el5.centos.x86_64.rpm | 900 kB 00:00 Running rpm_check_debug Running Transaction Test Finished Transaction Test Transaction Test Succeeded Running Transaction Installing : recode 1/1
Installed: recode.x86_64 0:3.6-22.el5.centos
Complete! [root@Test01 shell]# [root@Test01 shell]# |
2. Script 작성 및 실행 결과 보기
- TARGET_DIR 변수에 정의한 경로 이하에 있는 모든 File의 List를 검색하여, 해당 파일의 charset 정보를 확인 후 CHANGE_CODE 변수에 정의한 utf-8 로 변경
[root@Test01 shell]# [root@Test01 shell]# vi change_charset.sh #!/bin/bash
CHANGE_CODE=utf-8 TARGET_DIR=/root/recode TARGET_LIST=`find ${TARGET_DIR} -type f`
for LIST in ${TARGET_LIST}; do SOURCE_CHARSET=`file -i ${LIST} | cut -d "=" -f 2` if [ "$SOURCE_CHARSET" != "$CHANGE_CODE" ]; then recode -v ${SOURCE_CHARSET}...${CHANGE_CODE} ${LIST} 2>&- fi done [root@Test01 shell]# [root@Test01 shell]# [root@Test01 shell]# chmod 755 ./change_charset.sh
[root@Test01 shell]# [root@Test01 shell]# [root@Test01 shell]# file -i /root/recode/* /root/shell/test.org: text/plain; charset=iso-8859-1 /root/shell/test.txt: text/plain; charset=iso-8859-1 [root@Test01 shell]# [root@Test01 shell]# [root@Test01 shell]# [root@Test01 shell]# ./change_charset.sh [root@Test01 shell]# [root@Test01 shell]# [root@Test01 shell]# file -i /root/recode/* /root/shell/test.org: text/plain; charset=utf-8 /root/shell/test.txt: text/plain; charset=utf-8 [root@Test01 shell]# [root@Test01 shell]# [root@Test01 shell]# |
만약 변경할 Charset 값이 utf-8 방식이 아니라면 CHANGE_CODE 변수의 내용을 수정거나 Parameter 를 받는 방식으로 Shell Script를 수정하면 될 것이다.