Developement/Java

한글제목의 긴 글을 잘라 줄때 해결방법

highheat 2006. 4. 1. 02:37

스트링의 인코딩은 데이터베이스와 서블릿엔진등에서 다양하게 나타날 수 있습니다.

예를 들어서 톰켓이나 제우스의 기본 인코딩은 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로 수정하시면 되겠죠?..그럼 이 글이 도움이 되셨으면 합니다...^^