리눅스에서 text 인코딩 한꺼번에 바꾸기

Posted at 2008/04/06 21:59 // in Linux // by 엔신
필자는 최근까지 인코딩으로 EUC-KR 을 절대적으로 고수해왔다.
하지만 최근 ajax에 빠지면서 UTF-8 으로 바꿔야 할 필요성을 절실히 느껴서 서버 셋팅을 몽땅 UTF-8 으로 갈아 엎게 되었다.

하지만 문제는....

기존에 개발했던 스크립트는 모두 EUC-KR 로 되어 있어서 한글이 모두 깨지고 주석 달아 놓은것도 알아볼 수 없는 상황이 되었다.

약간의 구글링 끝에 좋은 해결 방법을 발견해서 소개한다.

GNU 에서 배포하는 recode 라는 작은 프로그램이 있다.
(http://www.gnu.org/software/recode/recode.html)

필자는 우분투 리눅스를 사용하고 있는데 설치는 3초도 안걸렸다.
apt-get install recode :)

사용방법은 매우 간단하다.
쉘에서 다음과 같이 입력하면된다.

recode -v <소스인코딩>...<출력인코딩> <파일명>

가장 마음에 드는 점은 와일드카드 (*) 를 지원해서 파일들을 한꺼번에 인코딩 변환이 가능하다.

recode -v EUC-KR...UTF-8 *.php

recode -l 을 치면 지원하는 모든 charset 을 볼 수 있다. :)

http://www.82i.com/@/zboard.php?id=faq&page=3&sn1=&divpage=1&sn=off&ss=on&sc=on&select_arrange=headnum&desc=asc&no=17

centos에서도 설치가능 yum install recode


이올린에 북마크하기
2008/04/06 21:59 2008/04/06 21:59

SSH클라이언트 접속시 한글깨짐문제 - /etc/sysconfig/i18n

Posted at 2008/04/06 21:06 // in Linux // by 엔신

SSH클라이언트 접속시 한글깨짐문제 - /etc/sysconfig/i18n

 

흠..

별로 신경 안썼었는데 SSH접속 시 한글이 깨지는 경우를 볼 수 있었다.

putty는 안그런다고들 하지만.. 내경우엔 Zterm을 쓰니.. (습관이 무섭다;)

 

암튼 어쩔수없이 설정을 잡기로 맘먹고..

 

/etc/sysconfig/i18n

 

>> 설정내용 (EUCKR용) =============================================

LANG="ko_KR.eucKR"
SUPPORTED="en_US.iso885915:en_US:en:ko_KR.eucKR:ko_KR:ko"
SYSFONT="lat0-sun16"
SYSFONTACM="iso15"

 

====================================================================

손을 댔는데.. 흠.. 역시 난 EUC-KR이 싫다.

뭐 EUC-KR이 기필코 필요하다면 써야하니.. 일단 주석처리..ㅋㅋ

다시 설정을 잡아야지..


>> 설정내용 (UTF-8용) ==============================================

LANG="en_US.UTF-8"
SUPPORTED="en_US.UTF-8:en_US:en:ko_KR.UTF-8:ko_KR:ko"

SYSFONT="latarcyrheb-sun16"
====================================================================


한글 자알~나오고있다ㅋㅋ

   

이올린에 북마크하기
2008/04/06 21:06 2008/04/06 21:06

MySQL 를 설치했는데 character set 의 변경

Posted at 2008/02/25 23:53 // in DBMS // by 엔신

안녕하세요. 신규로 4.1.7버전의 MySQL 를 설치했는데 character set 의 변경이 잘 되지 않아서 질문 올립니다.
아래에 버전 및 시도해본 방법을 적었습니다. 함 확인해보시고요 해결책 알려주시면 감사하겠습니다~


0. 버전
버전 : 4.1.7, source compile 해서 설치 (my.cnf 에서 수정하려고 configure 할때 character set 설정 하지 않았습니다.)


1. 현재 character 정보
mysql> show variables like 'char%';
+--------------------------+----------------------------------------+
| Variable_name | Value |
+--------------------------+----------------------------------------+
| character_set_client | latin1 |
| character_set_connection | latin1 |
| character_set_database | latin1 |
| character_set_results | latin1 |
| character_set_server | latin1 |
| character_set_system | utf8 |
| character_sets_dir | /usr/local/mysql/share/mysql/charsets/ |
+--------------------------+----------------------------------------+


2. 변경하려고 시도해본 방법
1) my.cnf 변경
[mysqld] 아래에
default-character-set=euckr
를 추가하고 mysql을 재시작하면 에러가 납니다.
/mysql/var/***.err 에서 에러를 확인하면 아래와 같습니다.

/usr/local/mysql/libexec/mysqld: Character set 'euckr' is not a compiled character set and is not specified in the '/usr/local/mysql/share/mysql/charsets/Index.xml' file


"Character set 'euckr' is not a compiled character set" 이라면 compile할때 euckr 이 빠졌다는 것인가요?

'/usr/local/mysql/share/mysql/charsets/Index.xml' file 에는 euckr 항목이 있습니다.

<charset name="euckr">
<family>Korean</family>
<description>EUC-KR Korean</description>
<alias>euc_kr</alias>
<alias>euc-kr</alias>
<collation name="euckr_korean_ci" id="19" order="Korean">
<flag>primary</flag>
<flag>compiled</flag>
</collation>
<collation name="euckr_bin" id="85">
<flag>binary</flag>
<flag>compiled</flag>
</collation>
</charset>


2) database의 character set을 직접 변경
mysql> ALTER DATABASE tv DEFAULT CHARACTER SET euckr;
ERROR 1115 (42000): Unknown character set: 'euckr'


3) 지원하는 character set 확인
설치한 mysql 서버에서 지원하는 character set을 확인해 보았습니다만 euckr 이 없네요.

mysql> SHOW CHARACTER SET;
+----------+-----------------------------+---------------------+--------+
| Charset | Description | Default collation | Maxlen |
+----------+-----------------------------+---------------------+--------+
| dec8 | DEC West European | dec8_swedish_ci | 1 |
| cp850 | DOS West European | cp850_general_ci | 1 |
| hp8 | HP West European | hp8_english_ci | 1 |
| koi8r | KOI8-R Relcom Russian | koi8r_general_ci | 1 |
| latin1 | ISO 8859-1 West European | latin1_swedish_ci | 1 |
| latin2 | ISO 8859-2 Central European | latin2_general_ci | 1 |
| swe7 | 7bit Swedish | swe7_swedish_ci | 1 |
| ascii | US ASCII | ascii_general_ci | 1 |
| hebrew | ISO 8859-8 Hebrew | hebrew_general_ci | 1 |
| koi8u | KOI8-U Ukrainian | koi8u_general_ci | 1 |
| greek | ISO 8859-7 Greek | greek_general_ci | 1 |
| cp1250 | Windows Central European | cp1250_general_ci | 1 |
| latin5 | ISO 8859-9 Turkish | latin5_turkish_ci | 1 |
| armscii8 | ARMSCII-8 Armenian | armscii8_general_ci | 1 |
| utf8 | UTF-8 Unicode | utf8_general_ci | 3 |
| cp866 | DOS Russian | cp866_general_ci | 1 |
| keybcs2 | DOS Kamenicky Czech-Slovak | keybcs2_general_ci | 1 |
| macce | Mac Central European | macce_general_ci | 1 |
| macroman | Mac West European | macroman_general_ci | 1 |
| cp852 | DOS Central European | cp852_general_ci | 1 |
| latin7 | ISO 8859-13 Baltic | latin7_general_ci | 1 |
| cp1251 | Windows Cyrillic | cp1251_general_ci | 1 |
| cp1256 | Windows Arabic | cp1256_general_ci | 1 |
| cp1257 | Windows Baltic | cp1257_general_ci | 1 |
| binary | Binary pseudo charset | binary | 1 |
| geostd8 | GEOSTD8 Georgian | geostd8_general_ci | 1 |
+----------+-----------------------------+---------------------+--------+


1)의 에러메시지에서 처럼 euckr character set 이 compile 되지 않았다는 것 같은데요,

그럼 어떻게 추가할수 있을까요.


이 글에 대한 댓글이 총 4건 있습니다.

안녕하세여

보니까 euckr 이 아니고 euc_kr 아닌가요 ?

euc_kr 로 한번 해보세여

윤명식(jazzlian)님이 2004-12-07 11:11:03에 작성한 댓글입니다.

정상적(?)으로 euckr을 지원하는 서버에서 확인해보면

mysql> show character set;
...

| euckr | EUC-KR Korean | euckr_korean_ci | 2 |

...

로 나옵니다.

버전에 따라 다른건가요? 제가 설치한것은 4.1.x 입니다.

오세영(osy530)님이 2004-12-07 11:48:48에 작성한 댓글입니다.

4.1에서는 euc_kr이 euckr로 변경되었습니다

오세윤님이 2004-12-07 13:43:22에 작성한 댓글입니다. Edit

별다른 해결책이 없는거 같아 새로 설치했습니다. ^^;;

configure 할때 characterset 옵션 주고 하니 잘 되네요.


참고로 한가지. 4.1 버전에서는 jdbc 설정도 변경해줘야 합니다.

이전버전에서 jdbc 설정했던 characterEncoding=EUC-KR로 하면 아래와 같은 에러가 납니다.

characterEncoding=euckr 로 하세요~


General error,  message from server: "Illegal mix of collations (euckr_korean_ci
,IMPLICIT) and (latin1_swedish_ci,COERCIBLE) for operation '='"



오세영(osy530)님이 2004-12-07 18:06:06에 작성한 댓글입니다.
이 댓글은 2004-12-07 18:06:26에 마지막으로 수정되었습니다.

http://blog.naver.com/hwangton?Redirect=Log&logNo=50001838485
이올린에 북마크하기
2008/02/25 23:53 2008/02/25 23:53

Daum 유니코드(UTF-8)에 도전하다

Posted at 2008/02/25 23:12 // in Ambiguous // by 엔신

지난 주 목요일에 Daum의 커뮤니티 섹션(카페, 블로그, 플래닛)의 개편이 있었습니다. 그냥 보기엔 일상적인 디자인과 콘텐츠 개편으로 보입니다만 실제 중요한 이슈 한 가지가 숨겨져 있습니다. 그것은 다름 아닌 모든 페이지가 유니코드(UTF-8) 인코딩 지원으 로 변경된 것입니다. 국내 웹 페이지들과 데이터 대부분은 지금까지 한글 완성형 코드(KSC5601)를 표현하는 EUC-KR 인코딩 방식을 주로 사용해 왔습니다. 따라서 UTF-8 지원이 대규모 웹 서비스에서 이루어진 것은 꽤 고무적이라고 볼 수 있습니다.

물론 Daum에서 UTF-8을 사용한 첫 서비스는 아닙니다. 협력 사진 공유 서비스인 Daum Pie가 신규 서비스로 개발될 작년 처음 UTF-8을 도입했습니다. 이번 커뮤니티 섹션 전체 적용에서는 이 사례와 경험을 기초로 작업해서 얻은 성과 입니다. 물론 개별 카페, 블로그, 플래닛과 데이터 전체가 전환된 것은 아니고 탑 섹션만 바뀌었지만 향후 UTF-8으로 가기 위한 초석을 쌓았다고 생각합니다.

UTF-8과 EUC-KR에 대한 장단점 문제는 오랫동안 논란이 되어 온 문제입니다. UTF-8 인코딩이한국어만 주로 표시하는 국내 웹 사이트에는 부적절하다는 이유도 있기도 합니다. 그러나, EUC-KR을 사용하면 ‘아햏햏’, ‘붺’ 같은 단어나 ‘다’ 같은 조선 시대 고어(古語) 등 우리말인데도 표시할 수 없다는 문제점이 있습니다. 이런 이유로 네이버 국어 사전은 UTF-8을 인코딩을 사용하고 있습니다. 뿐만 아니라 세계화 시대에 다른 외국어를 섞어 써야 하거나 다른 언어 운영체제(OS)에서 폰트 없이도 한글을 볼 수 있게 하려면 UTF-8이 꼭 필요하다고 하겠습니다.

해외 웹2.0 기업과 서비스들에서 공통적으로 나타나는 열 가지 기술 요소에 UTF-8이 들어가 있습니다. 글로벌 서비스를 지향하고 모든 나라와 문자를 표현 하게 하기 위한 수단으로 UTF-8은 매우 기본적인 요소입니다. 블로그 검색 서비스인 Technorati의 경우 비영어 콘텐츠가 60%가 넘고 있습니다. 만약 Technorati가 ISO-8859-1 인코딩 서비스를 썼다면 그런 컨텐츠를 수집하지 못했겠죠.

DB 용량이나 데이터 전환 비용과 같은 기타 문제를 떠나서 개발자들이 UTF-8으로 전향하기 가장 힘든 것이 바로 손에 익지 않은 개발 환경 때문입니다. 그건 마치 웹 표준 개발 방식으로 전향하는 문제랑 비슷합니다. 한번 익히고 세팅 한번만 하면 쉬운 문제이지요. IT산업이 글로벌 무한 경쟁으로 나가는 요즘 어렵지만 기본에 좀 더 충실해 지는 것은 우리가 향후 경쟁에서 싸워 이기는 데 큰 도움이 될 것입니다.

p.s. 이 프로젝트를 위해 고생한 mtgear에게 심심한 사의를…
p.s. 네이버 메일 UTF-8 전환도 이루어 지고 있다는 소식. 변화의 모습이 보기 좋습니다. 간발의 차네요.


http://channy.creation.net/blog/?p=350

좋은내용

이올린에 북마크하기
2008/02/25 23:12 2008/02/25 23:12