오라클DB를 설치 안하더라도,
오라클 클라이언트 혹은 instantclient 를 이용해, 오라클DB를 이용하고자 할때,
가장 많이 접하는 문제들입니다

[1] 한글깨짐
sqlplus에서 select문으로 확인해보면
한글이 ??? 같은 물음표로 나온다면 이렇게 설정해보세요

NLS_LANG=AMERICAN_AMERICA.KO16KSC5601
or
NLS_LANG=KOREAN_KOREA.KO16KSC5601

-유닉스 계열은 export NLS_LANG=AMERICAN_AMERICA.KO16KSC5601 식으로 등록하면 되고
(계속 등록해보려면 .profile 수정하시면 됩니당)

-윈도우 계열은
  시스템 등록정보 -> 고급 -> 환경변수(N)에서 시스템 변수에 넣어주시면 됩니다.

[2] TNSNAMES.ORA 설정파일 예제
>> tnsnames.ora파일은 다음과 같은 형식으로 작성되요.
TNS이름 =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 아이피)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVICE_NAME = 에스아이디 혹은 네임)
    )
  )

[3] 필수 환경변수 관련 내용들
-TNS_ADMIN=tnsnames.ora가있는폴더
예: TNS_ADMIN=C:\instantclient_11

-ORACLE_HOME=오라클이깔린폴더
예: ORACLE_HOME=C:\instantclient_11

대충 이정도면 오라클클라이언트로
select문으로 확인가능한 정도 사용가능합니다.
sqlplus같은경우는
path에 해당폴더를 추가해두면 편하구요.

sqlplus를 통한 접속방법은
$sqlplus id/pass@TNS
이렇게 접속하는건 모두 아시죠?

한글깨지는건 코딩하면서 꼭 겪는 일인듯 ㄱ-
기냥 회사에서 생활하면서 해결했던 방법을 작성해놓은것을
공개합니당


1. 인풋창 (input)의 한글이 깨져요

검색창이나, 검색어를 유지하는 hidden 텍스트창을 보면 한글이 깨져서 들어갔을때를 말합니다.
(input type = "text" .... 나 "hidden"같은걸 말합니다.

(방법1) jsp소스내에 언어설정
request.setCharacterEncoding("UTF-8");      <-- 톰캣 5.5계열에서 사용할겁니다

(방법2) 톰갯설정 변경 (빨간색 추가)  -- server.xml-- (대충 90번째라인 언저리)
참고로 주석처리 되어 있는 경우도 있으니,,, 찾아서 주석지우고 빨간색 추가하면됨

<!-- See proxy documentation for more information about using this. -->
    <Connectorport="8080"  maxHttpHeaderSize="8192"
               maxThreads="150" minSpareThreads="25" maxSpareThreads="75" enableLookups="false"
redirectPort="8443" acceptCount="100" connectionTimeout="20000" disableUploadTimeout="true" URIEncoding="euc-kr"/>

(방법3) 변환함수를 만들어서 해결 (개인적으로 비추합니다,  EUC-KR은 EUC-KR이라고하면됨)
public static String toUTF8 ( String s )

{

             String result = "";

                          

             try  {

                        result = new String(s.getBytes("8859_1"),"UTF-8");      //UTF8로 변환

             }

             catch(Exception e)

             {

           result = "";

        }

       

             return result;

}
응용들어가면 s.getByte("UTF-8"),"EUC-KR"); ... 같은형식도 되지요


(방법4)
이클립스 환경에서 개발할때, 이클립스 서버 설정파일변경 (Server.xml)
이클립스에서도 작업할때 참 난감했지요.
한글 인자값이 깨질때 이렇게 해결했습니다.

<Connector acceptCount="100" connectionTimeout="20000" disableUploadTimeout="true" enableLookups="false" maxHttpHeaderSize="8192" maxSpareThreads="75" maxThreads="150" minSpareThreads="25" port="8080" redirectPort="8443" useBodyEncodingForURI="true"/>


(방법5)
이클립스 환경에서 UTF-8페이지로 개발하는데 한글이 깨져요. <2008.12.23일 추가글>
4번방법으로 좌절먹고 이틀을 헤메다가 나타난 글...

이클립스(eclipse)의 (Server.xml)의 port=8080과 port=8009두개의 connector에
URIEncoding="UTF-8"을 추가한다.

 <!-- Define an AJP 1.3 Connector on port 8009 -->
<Connector enableLookups="false" port="8009" protocol="AJP/1.3" redirectPort="8443" URIEncoding="UTF-8" />

<!-- Define a non-SSL HTTP/1.1 Connector on port 8080 -->
<Connector acceptCount="100" connectionTimeout="20000" disableUploadTimeout="true" enableLookups="false" maxHttpHeaderSize="8192" maxSpareThreads="75" maxThreads="150" minSpareThreads="25" port="8080" redirectPort="8443" URIEncoding="UTF-8" />

흐흐 된다. (참고원본 : http://ngweb.tistory.com/124 )



2. 결과 페이지에서 한글이 깨져요

(방법1) jsp기준으로 해당페이지에

< % @ page language="java" contentType="text/html; charset="UTF-8"  % >
EUC-KR이면 당연히 그걸로 설정해야죠.
즉,
<%@ page language="java" contentType="text/html; charset=UTF-8" %>같은 캐릭터셋 설정이 되어있는지 확인해 봅니다.

(방법2) UTF-8페이지인데... 한글이 깨진다면....
저장할때 UTF-8로 저장했는지 확인합니다.
참고로 우리팀에서 자주쓰는 에디터 프로그램인 크림슨 에디터는
UTF-8을 지원하지 않습니다.
acroediter나 notepad++, 메모장등을 통해서 UTF-8형식으로 저장해야 합니다.
(클래스 파일의 경우는 굳이 utf-8로 안해도 동작하던걸로 기억합니다)



3. 이상하게 보이지 않는 깨진글자가 한 두개 보여요

에디터로 육안으로 보면 없던
이상한 깨진글자가 실제 브라우저로 보면 보일때가 있습니다.
BOM을 인식못해서 생긴 문제라고 합니다.

참고 : http://blog.naver.com/skeehun/150022910124

notepad++에서 형식메뉴 -> convert TO UTF-8 with out BOM 를
통해 제거후 저장하시면 됩니다.
(notepad++을 안쓰시면 그런기능이 있나 확인해보시면 됩니당)


4. 자바스크립트가 오류나요

캐릭터설정문제로 인해 스크립트가 깨지는 경우가 있습니다.
보통 웹페이지 캐릭터랑 .js파일의 캐릭터셋이 다를때 일어납니다.
(예: euc-kr jsp파일에서 , UTF-8의 .js파일을 사용할때)

이럴 경우,
< script language='javascript' type="text/javascript" src='/search/akc/akc.js'>< / script >

이런식으로 하면 안되고,
특정 캐릭터셋으로 만들어진 스크립트를 넣을땐 charset을 꼭 써주시면됩니다

< script language='javascript' type="text/javascript" src='/search/akc/akc.js' charset="euc-kr">< / script >

문서 캐릭터셋 보시려면 노트패드에서 새로저장할때
UTF-8인지 ansi인지 확인하시면 된답니다.


5. 한글을 주소에 넘겨주는데, 깨져버려요

자바같은곳에서 사용할 때

String kwd = "한글테스트";
String url = "http://green.daum.net/search/searchApi.jsp?coll=green&qry="+ kwd +"&display=10&srt=weight_value";
 
http = new URL(url);
try{
        BufferedReader rd = new BufferedReader(new InputStreamReader(http.openStream()));
        while ((body = rd.readLine()) != null) {
                out.println(body.length());
        }
}catch(Exception e) {
  out.println("stream: error " + e);
}


이런식으로 넘겨줄때, 한글이 깨지는 경우가 있다.
그래서 원하는 결과가 안나올때가 있는데,,,,
kwd = "%C7%D1%B1%DB%C5%D7%BD%BA%C6%AE" 같이

uri인코딩된 상태로는 잘 되는 문제..
이 경우는 java.net.URLEncoder.encode(kwd) 식으로 해결하면 OK.



-정선생-

+ Recent posts