티스토리 뷰
유니코드를 이용하지 않고 MBCS(Multi Bytes Character Set) 을 사용하는 시스템과 통신 시 싱글바이트 문자열로 변경하는 소스코드 기록한다.
/**
* 멀티바이트 한글문자를 싱글바이트 문자열로 변경 (db2 -> oracle)
* 작성 날짜: (00-06-18 오전 7:57:31)
* @return java.lang.String
* @param full java.lang.String
*/
public static String fullToHalf(String full) {
String answer = null;
int fullLength = full.length();
char[] ch1 = new char[fullLength];
full.getChars( 0, fullLength, ch1, 0 );
for ( int i = 0; i < fullLength; i++ ) {
if ( ch1[i] > 0xff00 && ch1[i] <= 0xff5e ) {
ch1[i] -= 0xfee0;
} else if ( ch1[i] == 0x3000 ) {
ch1[i] = 0x20;
}
}
answer = new String( ch1 );
// 뒷쪽 공백문자 trim
char[] ch2 = new char[fullLength];
full.getChars( 0, fullLength, ch2, 0 );
for( int i = fullLength - 1; i >= 0 ; i-- ) {
if( ch2[i] != 0x3000 && ch2[i] != 0x20 ) {
answer = answer.substring( 0, i + 1 );
break;
}
if( i == 0 ) {
answer = ""; //모두 공백
}
}
return answer;
}
/**
* 싱글바이트 한글문자를 멀티바이트 문자열로 변경 (oracle -> db2)
* 작성 날짜: (00-06-18 오전 7:48:51)
* @return java.lang.String
* @param half java.lang.String
*/
public static String halfToFull(String half) {
return halfToFull( half, ( half.length() ) * 2 );
}
/**
* 싱글바이트 한글문자를 멀티바이트 문자열로 변경 (oracle -> db2)
*
* @return java.lang.String
* @param half java.lang.String
* @param byteslength int
*/
public static String halfToFull(String half, int byteslength) {
// 전각은 2bytes이다.
if ( ( byteslength % 2 ) != 0 ) {
throw new IllegalArgumentException(
"byteslength(" + byteslength + ") is a odd number." );
}
String answer = null;
StringBuffer buf = new StringBuffer( half );
int halfLength = half.length();
int len = byteslength / 2;
char[] ch = new char[len];
buf.toString().getChars( 0, halfLength, ch, 0 );
for( int i = 0; i < halfLength; i++ ) {
if( ch[i] > 0x20 && ch[i] <= 0x7e ) {
ch[i] += 0xfee0;
} else if ( ch[i] == 0x20 ) {
ch[i] = 0x3000;
}
}
for ( int i = halfLength; i < len ; i++) {
ch[i] = 0x3000;
}
answer = new String( ch );
return answer;
}
오라클에서는 다음과 같이 간단하게 할 수 있다.
SELECT TO_SINGLE_BYTE("멀티바이트 문자열") AS STR1
, TO_SINGLE_BYTE( CHR(15711393)) AS STR2
FROM DUAL
;
'지식정보' 카테고리의 다른 글
ORACLE 레퍼런스 커서 타입 선언 (0) | 2013.07.29 |
---|---|
ORACLE 에서 DB Link 로 레퍼런스 커서 가져오기 (0) | 2013.07.29 |
ORACLE Closing REF CURSOR (0) | 2013.04.04 |
ORACLE 에서 날짜를 문자열로 변환할 때 0을 제외하는 방법 (0) | 2013.03.07 |
터미널에서 키보드의 Backspace키로 삭제가 안될때 (0) | 2012.11.23 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday