한글제목의 긴 글을 잘라 줄때 해결방법
스트링의 인코딩은 데이터베이스와 서블릿엔진등에서 다양하게 나타날 수 있습니다.
예를 들어서 톰켓이나 제우스의 기본 인코딩은 ISO-8895-1인것으로 알고 있습니다..그리고
데이터베이스 같은 경우는 기본이 ISO-8859-1인데 이것을 다시 EUC_KR로 바꾸어 쓰는
경우가 많으리라 봅니다.
데이터베이스가 EUC_KR로 인코딩이 정해서 있고 서블릿 엔진이 EUC_KR로 인코딩이 잡
혀있다면 한글 자르는 것은 다음과 같은 소스면 간단하게 해결됩니다.
String title = board.getTitle(); // 게시판에서 제목을 얻어온다.
int len = title.length();
int cnt=0, index=0, cutLength=54; // 각각 길이증가, 인덱스, 잘라줄 길이
while (index < len && cnt < cutLength) {
if (title.charAt(index++) < 256) // 1바이트 문자라면...
cnt++; // 길이 1 증가
else { // 2바이트 문자라면...
if(cnt < cutLength-3) {
cnt += 2; // 길이 2 증가
} else {
break;
} // 여기까지.
}
}
if (index < len){
title = title.substring(0, index);
title = title + "...";
}
이것은 일반적인 한글 자르는 소스입니다..그런데 스트링의 인코딩이 ISO-8859-1이나
UTF-8, MS874 일 경우는 스트링의 length()가 틀려지기 때문에 위의 코드는 안맞게 됩니다.
그렇다고 스트링의 인코딩을 바꾸어서 자르게 되면 글자가 깨지겠죠?..^^
그렇다면 일단 자를 적에 인코딩을 EUC_KR로 바꾸고 잘라서 다시 인코딩을 돌려 놓으면
문제는 해결되지 않을까요?..
저또한 한참 고생하다 위와 같은 방식으로 해결하게 되었습니다..
저의 개발환경은 사이베이스와 제우스라는 데이터베이스와 서블릿엔진을 사용했는데
두 녀석 다 인코딩이 ISO-8859-1이어서 궁합이 잘맞아 한글출력은 전혀 문제가 없었는데
막상 한글을 잘라 줄려니 ?가 생기고 안되더군요..그래서 다음과 같이 했더니 말끔히 해결되었습니다.
String title = board.getTitle(); // 게시판에서 제목을 얻어온다.
title = new String (title.getBytes("ISO-8859-1"), "EUC-KR"); // 스트링의 인코딩을 EUC-KR로 변형한다.
int len = title.length();
int cnt=0, index=0, cutLength=54; // 각각 길이증가, 인덱스, 잘라줄 길이
while (index < len && cnt < cutLength) {
if (title.charAt(index++) < 256) // 1바이트 문자라면...
cnt++; // 길이 1 증가
else { // 2바이트 문자라면...
if(cnt < cutLength-3) {
cnt += 2; // 길이 2 증가
} else {
break;
} // 여기까지.
}
}
if (index < len){
title = title.substring(0, index);
title = title + "...";
}
title = new String(title.getBytes("EUC-KR"),"ISO-8859-1"); // 깨지는것을 방지하기 위하여 원래의 인코딩으로 변형.
만약 인코딩 방식이 UTF-8이라면 위의 소스에서 ISO-8859-1을 UTF-8로 수정하시면 되겠죠?..그럼 이 글이 도움이 되셨으면 합니다...^^