[Java] 한글에서 유니코드로 변환하고 다시 한글에서 유니코드로 변환하는 방법


Development note/Java  2020. 2. 3. 10:00

안녕하세요. 명월입니다.


이 글은 Java에서 한글에서 유니코드로 변환하고 다시 한글에서 유니코드로 변환하는 방법에 대한 글입니다.


Java에서 프로퍼티 설정 파일을 수정하거나 Html에서 \uxxxx의 형태의 코드를 사용할 때가 있습니다.

저도 이걸 필요에 의해서 인코딩하고 디코딩하는 라이브러리나 소스가 필요한데 구글링을 해도 없었습니다. 제가 검색 실력이 떨어질 수도 있겠죠..


먼저 이 유니코드에서 설명을 하겠습니다.

key=\uBA85\uC6D4 \uC77C\uC9C0.. \uC548\uB155\uD558\uC138\uC694. this is english.

먼저 영어와 ascii코드는 변환없이 그대로 나오는 것 같습니다. 한글로 되어있는 부분이 \u가 붙어있고 4글자의 16진수 코드로 되어있습니다. 16^4 + 16^3 + 16^2 + 16^1의 조합입니다.

// 유니코드에서 String으로 변환
public static String convertString(String val) {
  // 변환할 문자를 저장할 버퍼 선언
  StringBuffer sb = new StringBuffer();
  // 글자를 하나하나 탐색한다.
  for (int i = 0; i < val.length(); i++) {
    // 조합이 \u로 시작하면 6글자를 변환한다. \uxxxx
    if ('\\' == val.charAt(i) && 'u' == val.charAt(i + 1)) {
      // 그 뒤 네글자는 유니코드의 16진수 코드이다. int형으로 바꾸어서 다시 char 타입으로 강제 변환한다.
      Character r = (char) Integer.parseInt(val.substring(i + 2, i + 6), 16);
      // 변환된 글자를 버퍼에 넣는다.
      sb.append(r);
      // for의 증가 값 1과 5를 합해 6글자를 점프
      i += 5;
    } else {
      // ascii코드면 그대로 버퍼에 넣는다.
      sb.append(val.charAt(i));
    }
  }
  // 결과 리턴
  return sb.toString();
}

unicode가 한글로 변환이 되었습니다.


이걸 다시 unicode로 변환하는 함수를 만들어 보겠습니다. 사실 제가 필요한 건 이 변환하는 함수였습니다.

// String에서 유니코드로 변환
private static String convertUnicode(String val) {
  // 변환할 문자를 저장할 버퍼 선언
  StringBuffer sb = new StringBuffer();
  // 글자를 하나하나 탐색한다.
  for (int i = 0; i < val.length(); i++) {
    // 글자 추츨 int값으로 가져온다.
    int code = val.codePointAt(i);
    // 128이하면 ascii코드로 변환하지 않는다.
    if (code < 128) {
      sb.append(String.format("%c", code));
    } else {
      // 16진수 유니코드로 변환한다.
      sb.append(String.format("\\u%04x", code));
    }
  }
  // 결과 리턴
  return sb.toString();
}

최초 한글로 변환하기 전의 유니코드와 같은 값이 나왔네요. eclipse의 properties 파일에서 자동 변환되는 값이 나왔습니다. 대소문자 차이는 있는데 포멧을 %04x에서 %04X로 바꾸면 대문자로 바뀔 것입니다.

제가 원하는 변환 식이 만들어 졌습니다. 필요하신 분은 가져다 쓰세요...


여기까지 Java에서 한글에서 유니코드로 변환하고 다시 한글에서 유니코드로 변환하는 방법에 대한 설명이었습니다.


궁금한 점이나 잘못된 점이 있으면 댓글 부탁드립니다.