서버에서 한글파일명 euc-kr utf-8 변환 방법 > 개발

본문 바로가기
사이트 내 전체검색

개발

서버에서 한글파일명 euc-kr utf-8 변환 방법

페이지 정보

profile_image
작성자 관리자 (61.♡.222.236)
댓글 0건 조회 3,494회 작성일 19-05-18 11:33

본문

요즘 서버 환경은 거의 모두 utf-8 환경이다.
그러나, 몇년 전만 해도 서버 환경이 euc-kr 인 경우가 많았다.

오래된 서버에서 새로운 서버로 컨텐츠들을 이전을 할 경우
필연적으로 한글 인코딩 변환 문제가 생긴다.

참고로, 영문의 경우는 인코딩과 상관없이 비교적 잘 처리가 되는 모양이다.

우선 알아 두어야 하는 부분이 있는데,
한글로 된 파일명 문제와 문서 파일 자체의 Charset 문제는 다른 문제이다.
별개로 처리해야 한다.


ㅁ 한글 파일명 변환

convmv 라는 명령어로 처리할 수 있다.
기본적으로 설치가 안되어 있기 때문에 설치를 해 주어야 한다.
# yum -y install convmv

기본적인 사용법은 다음과 같다.
# convmv -r -i -f euc-kr -t utf-8 *

옵션들을 살펴보자면,
-r  recursively go through directories  하위 디렉토리 모두 검색
-i  interactive mode (ask for each actiono)  확인하고 물어본다.
-f  encoding from
-t  encoding to
--notest  actually do rename the files

notest 옵션을 붙여야 실제로 파일명을 변환한다. 붙이지 않으면 테스트만 한다.


ㅁ 문서 인코딩 변경

** 중요. 꼭 백업후 진행한다.
iconv 명령어는 인코딩이 맞지 않거나 부족한 경우 내용을 삭제해 버린다.
-c 옵션으로 유효하지 않은 문자를 생략할 수도 있지만, 손실될 수도 있다.
꼭 백업후 진행한다.

인코딩을 변경하는 명령어는 iconv 이다.
기본적인 사용방법은 다음과 같다.
# iconv -c -f euc-kr -t utf-8 test.txt > test-utf8.txt

주요 옵션으로는,
-f  encoding from
-t  encoding to
-c  omit invalid characters from output

지원하는 인코딩 목록은 -l 또는 --list 옵션으로 확인할 수 있다.
# iconv -l

하지만, iconv 명령어는 한번에 하나의 파일만 변경할 수 있기 때문에,
변환할 파일이 많을 경우 단독으로 사용하기에는 불편하다.
find 의 도움을 받아야 한다.

그리고, euc-kr 보다는 확장형인 통합형 한글 코드(Unified Hangul Code) UHC(=CP949) 를 사용한다.
아래를 참고하자.
http://blog.naver.com/PostView.nhn?blogId=tongple&logNo=220867154978

실제 테스트 해보니,
uhc 가 euc-kr 보다 -c 옵션이 없이도 에러 없이 변환되는 것을 볼 수 있었다.

find 를 포함한 전체 명령어는
# find . -name "*.php" -type f -exec iconv -f uhc -t utf-8 "{}" -o "{}" \;

주요 옵션으로는,
기본적으로 find 명령은 현재 폴더를 포함한 하위 폴더를 모두 검색한다.
-name "*.php"  php 파일만 검색한다.
-type f  타입이 file 만 검색한다.
-exec  파일 검색후 iconv 명령을 실행한다.
-o  실행한 결과물 output

** 또, 중요..
반드시 -name 옵션으로 검색하는 파일의 범위를 줄여 준다.
모든 파일을 검색하게 되면, 이미지 파일 등도 인코딩을 시도해서 내용을 바꿔 버린다.
반드시 php, html, txt 등의 파일들만 검색하도록 한다.
그리고, 한번 변환한 파일은 다시 변환하지 않도록 하자.
iconv 는 무조건 변환을 해 버린다. 그리고 한글이 다시 깨진다. 헐~

스크립트를 만들어서 파일의 charset 이 iso-8859-1 인 것만 변환하게 만들어야 할 듯하다.
아래에 있는 스크립트를 참고할 만 하다.
https://neokido.tistory.com/entry/Linux디렉토리-전체의-인코딩을-euc-kr에서-utf-8로-바꾸기

ㅇ 파일 확장자 여러가지를 동시에 검색하는 방법
# find . \( -name "*.php" -or -name "*.html" -or -name "*.css" -or -name "*.js" \) -type f -exec iconv -f uhc -t utf-8 "{}" -o "{}" \;

위처럼 -or 로 연결한 -name 들을 괄호() 로 감싼다. 괄호에는 역슬래시를 붙인다.



참고
https://jybaek.tistory.com/704
https://stackoverflow.com/questions/1133698/find-name-pattern-that-matches-multiple-patterns
https://neokido.tistory.com/entry/Linux디렉토리-전체의-인코딩을-euc-kr에서-utf-8로-바꾸기

추천0

댓글목록

등록된 댓글이 없습니다.

Total 386건 10 페이지
  • RSS

검색


사이트 정보

Copyright © Baragi.Net. All rights reserved.