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


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