출처:http://egloos.zum.com/indirock/v/3791689
[vi 에디터 utf8 <-> euc-kr 웹문서 encoding 전환하기]
원문: (http://onlyu.blog.me/60123862837)
vi로 웹문서를 열어 보면 한글이 깨어져 있고
<meta http-equiv=Content-Type Content="text/html; charset=euc-kr">이 보인다면
리눅스 콘솔창에 env 해 볼때 LANG=ko_KR.UTF-8 으로 나온면 utf8 환경입니다.
Q) 그럼 한글이 깨어져 보이는 utf-8 시스템 환경에서 euc-kr 웹문서를 제대로 볼 수 없는 것인가?
A) 리눅스 환경이라면 vi 환경설정 파일인 .vimrc 파일에 set fileencodings=utf8,euc-kr 를 추가하면 문서를 열때 자동적으로 fileencoding이 utf8인지 euc-kr 인지 encoding에 맞게 열고 저장을 합니다.
계정 로그아웃(재접속)하지 않고 vi 설정을 적용할려면 콘솔에서 source .vimrc 하고 엔터키를 누르면 됩니다.
Q) 그럼 euc-kr 파일 웹문서를 utf8 파일로 변경을 하고 싶다면 어떻게 하죠?
A) vi로 파일을 열고 나서
:set fileencoding=utf-8
:w
하면 됩니다. 저장 후 종료를 할려면 :wq 엔터를 하면 됩니다.
반대로 utf8 문서를 euc-kr로 변경 할려면 :set fileencoding=euc-kr을 하면 됩니다.
euc-kr 웹문서를 utf8로 변경 하고 저장 했다면
<meta http-equiv=Content-Type Content="text/html; charset=utf-8">
로 하지 않으면 웹브라우저에서 확인시에는 다시 한글이 깨어져 보이겠죠.
Q) vi 에디터로 열지 않고 euc-kr 웹문서를 utf8로 변경 할려고 합니다. 어떻게 해야 하죠?
A) iconv 명령어로 가능합니다.
iconv -f euc-kr -t utf-8 euc-kr.html --output utf8.html
or
iconv -f euc-kr -t utf-8 euc-kr.html > utf8.html
Q)한개 파일이 아니라 여러개의 html 파일을 동시에 변경 할려면 어떻게 하죠?
백업 파일처럼 utf8.html로 할 필요없이 그냥 utf-8 파일로 변환 되면 좋겠는데요??
A)
변경을 원하는 경로로 이동을 하고 아래와 같은 명령어로 한방에 그럼 변경해 보겠습니다.
cd /web/files
for I in ./-.html ; do iconv -c -f euc-kr -t utf-8 $I > $I.tmp && mv $I.tmp $I ; done
작업 완료 전에는 무조건 백업본을 유지하는 것이 좋습니다. 그냥 원본폴더를 tar로 묶어 두면 되죠.
시스템 환경에 따라 작업 환경에 따라 charset encoding은 테스트 작업을 하고 본격적으로 진입 하는 것이 바람직합니다.
Q) recode 명령어로 한번에 변경 할 수 있다고 하는데 어떻게 하나요?
A) 먼저 시스템에 recode 명령어를 사용할 수 있는지 확인 해야 하는데
rpm -qi recode 해서 아무것도 안나오면 설치 해야합니다.
yum install recode recode-devel 또는 rpm을 찾아서 설치 하거나
http://recode.progiciels-bpi.ca/index.html 접속해서 파일을 받아서 설치합니다.
recode 명령어로 얼마나 많은 charset 변경을 할 수 있는지 확인은
recode -l 로 살펴 보면 됩니다. 그럼 euc-kr에서 utf-8로 변경 명령어는 아래와 같습니다.
recode -v <소스 CHARSET>...<변환 CHARSET> <파일명>
recode -v EUC-KR...UTF-8 *.html
Q) php에서 특정 문자열만 euc-kr 또는 utf8로 할려면 어떻게 하죠?
A) iconv 함수를 이용하면 됩니다.
iconv("euc-kr", "utf-8", $str); // euc-kr을 utf8로 encoding 됩니다.
iconv("utf-8", "euc-kr", $str); // utf8을 euc-kr로 encoding 됩니다.
참조 URL : http://www.php.net/manual/en/function.iconv.php
Q) java,jsp에서 문자열 encoding 전환은?
A)
StringBuffer szBuffer = new StringBuffer();
String str = new String(szBuffer.toString().getBytes("UTF-8"), "EUC-KR");
http://download.oracle.com/javase/1.5.0/docs/guide/intl/encoding.doc.html
여전히 한글이 깨어진다면 아래 상황을 체크 해 봅니다.
1. <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
2. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
3. <Connector URIEncoding="UTF-8" connectionTimeout="10000" port="8080" protocol="HTTP/1.1" redirectPort="8443"/>
4. URIEncoding 세팅을 해 놓아도 get/post 메소드로 넘어갈때 Parameter값 한글이 깨어질때는
SetCharacterEncodingFilter.java 파일을 $CATALINA_HOME/common/classes (톱캣) 또는 WEB-INF/classes (개인환경) 밑에
javac SetCharacterEncodingFilter.java -d .
컴파일을 하고 web.xml 파일 encoding 필터 세팅이 되어 있는지 확인 해 봅니다.
* utf8 톰캣이 아니라면 톰캣 4.x 은 기본적으로 8859_1로구동이 됩니다. export LANG=en_US.iso8859-1
export LANG=ko_KR.eucKR 으로 한다면 charset은 euc-kr로 구동이 됩니다.
추가 옵션으로 export CATALINA_OPTS='-Dencoding.default=euc-kr -Dfile.encoding=euc-kr'
Q) 윈도우 노트패드(notepad)에서 encoding 변환 작업은 할 수 없나요?
A) 윈도우에서 작업 가능한 무료 에디터 notepad++를 소개 해 드립니다.
http://notepad-plus-plus.org/ 접속 후 다운로드(DOWNLOAD) 메뉴에서 받으시면 됩니다.
윈도우에서 생성한 ANSI Encoding 파일을 상단 메뉴 Encoding 에서
Convert to UTF-8 without BOM (UTF-8 형식으로 변환 BOM 없음) 으로 선택하시면 UTF-8 Charset 으로 변환이 됩니다.
(notepad++ 메뉴를 한글로 변경 Settings > Preferences > General Localization 셀렉터 항목에 한국어를 선택하면 됩니다.)
(추가)
Q) 여러 사이트에서 넘어 오는 값이 각각 다른데 utf8 인지 euc-kr 인지 어떻게 알죠?
A) php 경우라면 mb_detect_encoding($str); 로 찍어 보면 압니다.
하여 각각 원하는 encoding을 iconv로 변환을 해 주면 됩니다.
'develop > linux' 카테고리의 다른 글
vi 자동으로 encoding 설정 (0) | 2024.03.07 |
---|---|
TTFB 체크 명령어 (0) | 2016.02.16 |
GNU C, __attribute__ (0) | 2014.10.14 |
Linux C에서 키보드 이벤트 받기(kbhit()) (0) | 2014.02.28 |
NAT 종류별 설정 (0) | 2014.02.17 |