깨지죠 -_-
database에 dbms 툴을 이용해서 접근한 후에 select했을 때에
한글이 나오는데 왜 내 어플리케이션(웹이건 뭐건) 에서만 유독 한글이 깨질까?
네. 제목과 같은 이유입니다.
그렇다면 그냥 gg 쳐야할까요?
database 내의 data를 encoding을 다르게 해주는 방법이 있으나 ..
뭐.. 검색 좀 해보니 비추라고 나오네요.
(data가 얼마 없거나 테스트 과정이라면 당연히 바꿔야겠죠!!!)
그래서 java의 String 생성자중에 기특한 녀석이 있습니다.
우선 어떤 녀석인지를 알기 이전에
http://blog.naver.com/anabaral/130043451093
여기에서 8859_1 라는 앞으로 소개할 byte 형식을 이해하시길 바랍니다~
(뭐 몰라도 크게 상관은 없을 수 있습니다만...?? ㅎㅎ;;)
위 블로그에서 보셨듯이 8859_? 라는 것은 일종의 character set을 byte 형태로 변환할 때에 쓰입니다.
(아 뭐라고 적절한 표현이 생각나질 않네요 -_-;;; 문학책 손놓은지 몇개월됐더니...에효..)
자, 그럼 8859_1 이란 것은 String data를 byte 형태로 변환할 때에 쓰인다는 것은 알았구요.
그럼 character encoding이 다른 database로부터 data를 불러온 application이 사람의 눈에
같게 보이게 하려면 어떻게 해야할까요? 서론이 길었네요;;
앞에서 알려드렸듯이 String의 생성자와 8859_1을 이용하시면 됩니다.
우선 data를 byte 형태로 불러와야 합니다.
data.getBytes("8859_1");
위의 메소드를 통해 가져온 byte형태의 data, 그리고 원하시는 encoding 표기명을 parameter로
String 을 생성해주면 됩니다.
예로써, 아래는 utf-8로 저장되어있는 오라클의 data를 euc-kr 로 구현된 application에서 경우입니다.
(저장된 data가 한글이라는 가정아래)
new data = resultSet.getString("form_UTF8_encoding_oracle_data");
System.out.println(data); // 외계어가 나옵니다.
data = new String(data.getBytes("8859_1"), "euc-kr");
System.out.println(data); // 저장되어있는 한글 data가 나옵니다.
뭐 길게 적을 내용은 아니었는데;;; 길었네요 -_-;;;
8859_1 의 비밀을 이해하시기 위해서라면 꼭 상위의 저 링크를 참조하시길 바랍니다~
'Programming > etc' 카테고리의 다른 글
[tomcat] 도메인 연결 (2) | 2012.07.17 |
---|---|
[AES256 암호화 각 언어별 모듈지원 url link] (0) | 2012.07.16 |
[eclipse] eclipse market place에서 google plugin for eclipse로 인스톨 실패시. (0) | 2012.04.11 |
[facebook] 랜딩페이지의 meta태그의 data와 이미지 url을 수정해도 썸네일이 바뀌지 않는다면..? (0) | 2012.04.05 |
facebook : facebook 보안서버가 아닌 웹서버에서 php sdk로 canvas app 구현하기 (2) | 2012.03.30 |