티스토리 뷰

보통 request.getParameter()로 반환된 값의 캐릭터셋은 8859_1이다. 만약 한글이라면 페이지에 표시해 줄때 깨진 글자
가 나올것이다. 이때 (1) request의 캐릿터셋을 EUC-KR로 변환해 주거나 (2) request.getParameter()로 반환된 String
을 getBytes("8859_1")로 변환후 새로운 String 객체를 만드면 된다.(단, 반환된 값이 null 이 아닌경우.)

(1)의 예 : request.setCharacterEncoding("EUC-KR")
(2)의 예 : new String( request.getParameter("name").getBytes("8859_1"), "EUC-KR")

하지만 이렇게 해도 한글은 제대로 표시가 안될 것이다. 왜나면 페이지에 표시해 줄 캐릭터 셋이 틀리기 때문이다. 해서
서버페이지 상단에 <%@ page language="java" contentType="text/html; charset=EUC-KR"%>을 넣어 주면 해결된다.

자 이제 이렇게 넘어온 것을 DB에 저장해 보자. 만약 DB의 캐릭터셋이 8859_1 이었을때 위와 같이 변환을 해주면 분명히 글자가 깨져서 들어가게 될것이다. 바로 insert를 할 시에는 request로 받은것은 그냥 넣으면 된다. 그러면 DB에 저장
되 있는 글들은 올바르게 보여질 것이다. 하지만 select문으로 검색해서 ResultSet 객체의 getString() 메소드에 반환된
String의 캐릭터셋은 JAVA의 기본 캐릭터셋일 것이다. 이것을 다시 그대로 아무 변환없이 DB에 update 나 insert할 시
깨진 글자로 들어가게 된다. 그렇다면 이것을 다시 변환해야 한다는 것이다. 이때는 위의 (2) 의 예와 반대로 해주면
될것이다. (예: new String( rs.getString(1).getBytes("EUC-KR"), "8859_1") )

간단한 얘기를 길게 쓴것같군..;; 요점은 DB에 저장시 request로 받은 것은 변환없이 넣으면 되고(캐릭터셋이 8859_1
일 경우) DB에서 읽어온 것을 다시 넣을 경우(변경하지 않고 넣을 시)는 8859_1로 변환해서 넣어야 한다.
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG more
«   2024/05   »
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 31
글 보관함