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