블로그 이미지
좋은느낌/원철
이것저것 필요한 것을 모아보렵니다.. 방문해 주셔서 감사합니다..

calendar

1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30

Notice

    'Database'에 해당되는 글 2

    1. 2008.11.03 DB2 UTF-8로 변환할 때...
    2. 2008.08.25 oracle " select sysdate from dual" db2에서는?
    2008. 11. 3. 15:42 Database
    euc-kr에서 utf-8로 넘어가는데 장애가 좀 큽니다. ㅡㅡ;
    개인 홈페이지라면 별 신경 안쓰는데 회사 홈페이지 작업시 그냥
    utf-8로 바꾸었다가 글씨 다 깨지면 난리나니까 걱정입니다. OTL

    [애로사항]
    1. 현재 작업중인 사이트가 euc-kr 인코딩으로 저장된 것들인데
    utf-8로 바꾸려면 파일들 전부 열어서 utf-8로 저장해야 되죠? ㅠ_ㅠ

    2. 사이트 제작시 사용하는 엔진프로그램이 있는데 이것도 당연히
    euc-kr로 되어 있으므로 전부 열어서 새로 저장해야 할텐데 이럴경우
    어떤 프리랜서 디자이너가 euc-kr로 작업해서 가져올경우 대략 난감
    해집니다. 프로그램을 euc-kr, utf-8 두가지 버전으로 가지고 있어야
    할까요? ㅡ0ㅡ;

    3. euc-kr로 저장된 파일을 utf-8로 저장하면 한글 다 깨지는거 아닐
    까요?

    4. 어차피 지금 euc-kr로 작업한 사이트는 지나가고 다음부터 utf-8로
    작업할시 주의해야 할 사항이 있다면 가르쳐주세요. 하지만 위의
    엔진프로그램은 앞으로도 계속 사용해야 하기 때문에 위와같은 문제
    발생시 난감해집니다. 파일을 열지않고 모두 인코딩 변환해주는거
    없을까요?


    이번에 css레이아웃 기반의 사이트를 2개 오픈하였는데 정말 너무
    힘들었습니다. 아직 디자이너들이 css레이아웃을 잘 사용하지 못해서
    제가 코딩을 거의 다했거든요. 교육은 수시로 하지만 테이블 레이아웃
    개념에서 잘 못빠져 나오고 id와 class의 조합등 여러 응용력이 너무
    부족한게 현실입니다. 이 상태에서 euc-kr을 utf-8로 바꾸는 작업
    했다가는 저 죽을지도 모릅니다. ㅡㅡ; 과로사!

    그리고 이번에 오픈한 사이트중 하나는 다국어 사이트 입니다.
    뭐 해봤자 중국어, 영어, 일본어 일텐데 영어는 문제 없을 것 같지만
    중국어, 일본어는 euc-kr로 작업하면 안되겠죠? 큰일이다 ㅠ_ㅠ

    겁나서 손을 못대고 있습니다. euc-kr에서 utf-8로 옮겨가는 것에
    대한 허와 실을 가르쳐 주십시오. .(__).

    &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&


    일반적인 리눅스 배포본에는 iconv라고 거의 있을겁니다.(glibc패키지에 딸려있는)

    Code: Select all
    $ iconv --from-code=cp949 --to-code=utf-8 원하는파일.txt --output=바뀐파일.txt


    이런식으로 인코딩을 변경해서 씁니다.

    저런 툴이 윈도우즈 환경에도 있을겁니다. 정적인 페이지의 경우는 일괄적으로 변경하고 헤더에 인코딩 지정을 utf-8로 바꿔주시면 될것 같습니다.

    동적으로 생성되는 페이지들의 경우는 잘 모르겠습니다.


    &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&


    뭐, 그렇게 길게 쓰셔도 상관 없습니다만, 짧은 옵션을 쓸 수도 있습니다. :-)

    Code: Select all
    iconv -f  cp949 -t UTF-8 input > output
    iconv -f cp949 -t utf-8 -o output input


    Windows용으로도 libiconv를 이식해 놓은 것이 있으므로 거기에 들어 있는 iconv를 쓸 수 있습니다. 또 다른 방법은 Win32 API인 MultiByteToWideChar와 WideCharToMultiByte를 써서 변환하는 C 프로그램을 하나 짤 수도 있습니다.
    (Perl 5.8 이상이나 Python 2.4 이상에 들어 있는 인코딩 변환 모듈을 써도 물론 되고요)

    아니면, JDK에 들어 있는 native2ascii를 2개 연결해서 쓰는 수도 있습니다.

    Code: Select all
    native2ascii -encoding MS949 inputfile  tempfile
    native2ascii -encoding UTF-8 -reverse tempfile outputfile



    html 파일 뿐 아니라 php, jsp. javascript 등도 파일에서 한글을 'raw string'(literal string)으로 쓰고 있었다면 위와 같은 식으로 일단 바꾸십시오. 그 후에 각 파일에서 euc-kr로 charset 선언을 한 부분도 모두 utf-8로 바꿔야겠지요. 혹시, 웹 서버 설정으로 (apache와 tomcat 등) http header를 통해 'charset=EUC-KR'을 내보내도록 된 부분이 있으면 명시적으로 http header를 통해 charset을 내보내지 않도록 하거나, UTF-8를 내보내도록 바꾸십시오.

    jsp의 경우 다음처럼 문자 인코딩 설정을 해 주세요:

    Code: Select all
    <%@ page contentType="text/html; charset=UTF-8"
             pageEncoding="UTF-8"
    %>


    contentType은 http 헤더를 통해 내보낼 C-T의 값일 뿐 아니라 실제로 밖으로 나가는 문서의 인코딩입니다. pageEncoding은 jsp 파일의 인코딩입니다. jsp 파일은 EUC-KR이면서 밖으로 나가는 (jsp를 컴파일한 후에 servlet engine이 내보내는) 문서의 인코딩은 UTF-8일 수 있습니다. 그 경우에는 다음과 같이 선언하면 됩니다.

    Code: Select all
    <%@ page contentType="text/html; charset=UTF-8"
             pageEncoding="EUC-KR"
    %>


    jsp나 servlet을 써서 form processing을 할 때에는 또 다른 값을 설정해 주어야 합니다.
    Code: Select all
    javax.servlet.ServletResponse.setCharacterEncoding("UTF-8")
    (jsp에서는
    Code: Select all
    request.setCharacterEncoding("UTF-8")
    )일 것입니다.
    이렇게 해도 get으로 받은 form의 인코딩이 이상할 것입니다. (post는 이상 없습니다).
    http://okjsp.pe.kr/bbs?act=VIEW&seq=410 ... word=&pg=5
    ('KSC5601'을 쓰라고 한 자리에 'UTF-8'을 쓰세요)애 았는 방법도 쓸 수 있지만, 다음을 server.xml에 넣는 것이 더 나을 것입니다.

    Code: Select all
    <Connector port="8080" maxThreads="150" minSpareThreads="25"
    maxSpareThreads="75" enableLookups="false" redirectPort="8443"
    acceptCount="100" debug="0" connectionTimeout="20000"
                   disableUploadTimeout="true"
                   useBodyEncodingForURI="true">



    http://java.sun.com/developer/technical ... ingualJSP/


    php라면 mbstring, iconv 모듈이 포함되어 있는 것을 쓰시는 것이 좋습니다.

    어느 경우라도 한글은 2byte, 라틴 글자는 1byte라는 가정 하에 바이트 수를 세어서 글자 수를 계산하던 방식은 통하지 않는다는 것에도 유의하십시오.

    DB backend에서도 UTF-8 혹은 다른 Unicode transformation form을 쓰도록 설정하셔야겠지요. MySQL이라면 필히 4.x 이상을 쓰셔야 multibyte encoding을 제대로 지원해 줍니다. posgresql은 최근 몇 년 사이에 나온 것은 다 잘 지원합니다. Oracle, Sybase, DB2 등도 잘 지원하고요. (단, Oracle에서 UTF8은 진짜 UTF-8이 아니므로 - Oracle이 유니코드 표준을 잘못 이해해서 만든 이상한 인코딩임- altutf8을 쓰셔야 합니다. Unicode의 첫번째 65,536자만 쓸 경우에 차이가 없기는 하지만, 혹시 나중에 그 이후의 글자를 써야할 일이 있을 때 생길 문제를 미리 방지하기 위함입니다.)

    JDBC로 DB에 연결할 때에도 문자 인코딩을 지정하는 것을 잊지 마십시오.



    &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&


    txt 파일이야...다시 만드는 거니까 문제가 없지만...DB 가 문제더군요.
    저같은 경우 리뉴얼작업을 주로 해왔는데 DB 가 utf-8 로 되어 있는 경우는 한번도 못봤습니다.
    서버를 새로 까는 경우는 한번도 없었어요.
    기존의 서버 설정을 따라야 하는데...그러한 것들이 utf-8 로 넘어가는데 큰 걸림돌인것 같아요.

    제가 개발쪽을 잘 몰라서 어렵게 느껴지는 것일 지도...ㅎㅎ

    제 개인 홈페이지는 아주 간단하게 utf-8 로 바꿨습니다.
    파일 다 열어서 utf-8 로 바꾸고, Data 파일(저는 text data 만 사용합니다. --;;) 다 열어서 바꾸고....끝

    제 생각인데 utf-8 을 사용하려면 server level 을 마음대로 수정 할 수 있을 때에나 가능 할 것 같네요.





    &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
    hyeonseok 님의 글:txt 파일이야...다시 만드는 거니까 문제가 없지만...DB 가 문제더군요.
    저같은 경우 리뉴얼작업을 주로 해왔는데 DB 가 utf-8 로 되어 있는 경우는 한번도 못봤습니다.
    서버를 새로 까는 경우는 한번도 없었어요.
    기존의 서버 설정을 따라야 하는데...그러한 것들이 utf-8 로 넘어가는데 큰 걸림돌인것 같아요.


    기존의 DB를 UTF-8로 바꾸는 가장 쉬운 방법은 현재 내용을 모두 덤프한 다음에 그 덤프한 파일을 iconv나 다른 인코딩 변환 도구로 UTF-8로 바꾸고, 그 결과를 DB에 다시 넣는 것입니다. 즉, 벡업으로부터 복구하는 과정과 비슷한데, 다만 인코딩을 바꾸는 과정이 중간에 들어간 셈입니다. 물론, DBMS에 따라서 필드 크기 등을 조절할 필요가 있을 수도 있습니다.

    DBMS에 따라 다르지만, 전체 DBMS 수준의 인코딩, 그 안에서 개별 DB의 인코딩, 개별 DB 안의 table 인코딩(심지어 테이블 안의 field 별 인코딩도 따로 지정할 수 있는 DBMS도 있지요)을 독립적으로 지정할 수 있으므로 DBMS 전체의 설정을 변경할 필요(혹은 그런 변경을 하는데 필요한 권한을 가질 필요)는 없을 것입니다.

    참, UTF-8을 쓸 경우 DBMS의 데이터 저장 방식에 따라 다르겠지만, EUC-KR에 비해 크기가 늘어난다는 점은 유의해야할 것입니다. 따라서, 한글이나 한자가 차지하는 비중이 매우 높다면, UTF-8 대신 UTF-16을 쓰는 것도 고려해 볼 수 있습니다. DB에서 UTF-16을 쓰는 경우라도 바깥 세상과 소통을 할 때에는 (html을 만들어 내보낼 때) UTF-8을 쓰는 것이 더 나을 것입니다.



    &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&


    한국 웹의 현실을 개선하기 위해 일선 현장에서 실천하시면서 결과물을 내놓고 계셔서 제가 오히려 감사 드려야 할 듯 싶습니다.참, 위에 적을 때 깜박 잊었는데, 혹시 UTF-8 편집기(윈도우즈용)를 고르고 계신다면 다음 글에서 언급한 jEdit가 꽤 괜찮은 것 같아 보입니다.

    http://www.ktug.or.kr/jsboard/read.php? ... 558&page=2

    UTF-8을 잘 지원하는 Windows용 ssh client로는 putty가 있습니다.
    (Appearance | Translation에서 UTF-8을 고를 수 있습니다)

    http://www.chiark.greenend.org.uk/~sgtatham/putty/

    한국에서 개발한 token도 ssh를 지원하면서 UTF-8도 지원했던 것 같은데, 확실하지 않습니다.
    posted by 좋은느낌/원철
    2008. 8. 25. 17:48 Database

    select current_date from sysibm.sysdummy1;

    이렇게 해야 한단다...

    posted by 좋은느낌/원철
    prev 1 next