일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- PHP
- MySQL
- Google Map
- oracle
- sencha touch
- jQuery
- WebLogic
- iBATIS
- Spring
- 가우스
- Ajax
- swingx
- 전자정부프레임워크
- tomcat
- Struts
- JDOM
- ibsheet
- Eclipse
- MFC
- Android
- PLSQL
- dock
- node.js
- rowspan
- GPS
- appspresso
- jsr 296
- 선택적조인
- JSON
- phonegap
- Today
- Total
Where The Streets Have No Name
한글제목의 긴 글을 잘라 줄때 해결방법 본문
스트링의 인코딩은 데이터베이스와 서블릿엔진등에서 다양하게 나타날 수 있습니다.
예를 들어서 톰켓이나 제우스의 기본 인코딩은 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로 수정하시면 되겠죠?..그럼 이 글이 도움이 되셨으면 합니다...^^