한글이 포함된 문자열의 길이를 구해보자.
String s = "소곤소곤abcd"; System.out.println(s.length()); // 8
String.length()는 한글이건, 영문이건 상관없이 우리가 인지하는 글자 갯수를 돌려준다.
String s = "소곤소곤abcd"; byte[] buf = s.getBytes(); // using DefaultCharset System.out.println(buf.length); // 16이 경우는, 메모리상에 위치할 실제 바이트수를 알아낼 수 있다. 잠깐! 한글은 2바이트니깐 결과값이 12일텐데 16이라고??? 12도 맞고 16도 맞다. 내 시스템의 eclipse는 UTF-8로 세팅되어 있고, 여기서 한글 한글자는 3바이트를 차지한다. 즉, 결과값은 이 코드가 동작하는 시스템의 기본 인코딩이 뭐냐에 달려있다.
문제는 실행파일(apk 혹은 jar)을 배포했는데, 그게 돌아가는 환경에 따라 이 값이 다르게 나온다는 것이다. 그래서, 시스템 비의존적인 실제 바이트수를 알아낼 필요가 있다.
이때 쓸 함수가 getBytes(String EncodingCharsetName)이다.
String s = "소곤소곤abcd"; System.out.println(s.getBytes("UTF-8").length);하지만 그냥은 런타임에러가 난다. 엔코딩실패를 대비해서 try catch로 감싸주어야 한다. 함수로 만들어 보았다.
public int getRealSize(String text) { int size = -1; try { size = text.getBytes("UTF-8").length; } catch (UnsupportedEncodingException e1){ } return size; }이종시스템간 데이터교환 (특히 클라이언트-서버방식의 게임)에서는 항상 주의해야 한다.