메뉴 건너뛰기

Dev tips

JSP UTF-8 인코딩시의 바이트 수를 계산하는 함수

taknim 2012.05.08 19:28 조회 수 : 8408 추천:1338

http://blog.naver.com/gh2501/119067204UTF-8은 유니코드의 가변 폭 인코딩 기법으로 캐릭터 셋에 따라 1바이트에서
4바이트까지 폭이 변동하며, 첫 번째 바이트를 읽는 것만으로 몇 개의 바이트로 구성된
것인지 알 수 있기 때문에 상당히 정교하다.

하위 16비트만 표현할 때는 최대 3개 바이트로 충분하다. UTF-8에서 상위 아스키코드
영역은 1바이트로 표현될수 있고 한글은 대개 3바이트를 차지한다.

자바는 UCS-2(UTF-16)을 기본 인코딩으로 사용하고 있기 때문에 String.length() 를 통해
얻은 문자열의 길이와 UTF-8을 사용하는 데이터베이스에 저장했을 때의 길이가 달라진다.
이를 해결하기 위해 UTF-8인코딩시 바이트 수를 계산해주는 공통 함수를 정의하여  
데이터베이스에 저장될 최대 문자수를 계산하도록 한다.

다음은 UTF-8인코딩 시의 바이트수를 계산하는 함수예제이다.
public class UTF8Count {
public static void main(String args[]){
  System.out.println(getUTF8Count("바이트"));
  System.out.println(getUTF8Count("byte"));
}

public static int getUTF8Count(String s){
  return getUTF8Count(s.toCharArray());
}

protected static int getUTF8Count(char[] c){
  int len=c.length;
  int count=0;
  
  for(int i=0;i<len;i++){
   int ch=c[i];
   if(ch<=0x7f){
    count++;
   }else if(ch<=0x7ff){
    count+=2;
   }else{
    count+=3;
   }
  }
  return count;
}
}

실행 결과
9
4

UTF-8 인코딩시 영문은 1바이트, 한글은 3바이트를 차지하기 때문에 각각 9와 4
가 찍히게 된다

[출처] UTF-8 인코딩시의 바이트 수를 계산하는 함수|작성자 실바