리눅스에서 text 인코딩 한꺼번에 바꾸기
하지만 최근 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
SSH클라이언트 접속시 한글깨짐문제 - /etc/sysconfig/i18n
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"
====================================================================
한글 자알~나오고있다ㅋㅋ
MySQL 를 설치했는데 character set 의 변경
안녕하세요. 신규로 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 되지 않았다는 것 같은데요,
그럼 어떻게 추가할수 있을까요.
안녕하세여
보니까 euckr 이 아니고 euc_kr 아닌가요 ?
euc_kr 로 한번 해보세여
정상적(?)으로 euckr을 지원하는 서버에서 확인해보면
mysql> show character set;
...
| euckr | EUC-KR Korean | euckr_korean_ci | 2 |
...
로 나옵니다.
버전에 따라 다른건가요? 제가 설치한것은 4.1.x 입니다.
4.1에서는 euc_kr이 euckr로 변경되었습니다
별다른 해결책이 없는거 같아 새로 설치했습니다. ^^;;
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 '='"
이 댓글은 2004-12-07 18:06:26에 마지막으로 수정되었습니다.
http://blog.naver.com/hwangton?Redirect=Log&logNo=50001838485
Daum 유니코드(UTF-8)에 도전하다
지난 주 목요일에 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
좋은내용

not as usual