* 실제로 이렇게 사용하는 것이 괜찮은가 하는 것은 잘 모르겠으나, 일단 한 번 구현해 보았다.
public static final Charset CHARSET_EUC_KR = Charset.forName("EUC-KR"); public static final String KSC5601_START_HEX = "A1A1"; //EUC-KR 코드페이지 내에서 KSC5601의 시작코드 public static final String KSC5601_END_HEX = "FEFE"; //EUC-KR 코드페이지 내에서 KSC5601의 종료코드 public static final int KSC5601_START_INT = Integer.parseInt(KSC5601_START_HEX, 16); public static final int KSC5601_END_INT = Integer.parseInt(KSC5601_END_HEX, 16); /** * 매개변수로 받은 바이트배열을 EUC-KR 문자열로 변환한 문자열의 문자(char)가 모두 KSC5601 코드페이지 범위에 속하면 true, 한 글자라도 속하지 않는 것이 있으면 false를 리턴한다. */ public static boolean isKSC5601String(byte[] srcBytes){ if(LOG.isDebugEnabled()){ LOG.debug("isKSC5601String(byte[]) > 매개변수로 받은 srcBytes(16진수 변환): "+Hex.encodeHexString(srcBytes).toUpperCase()); } String srcString = null; try{ srcString = new String(srcBytes, CHARSET_EUC_KR); }catch(UnsupportedEncodingException e){ LOG.error("isKSC5601String(byte[]) > " + Hex.encodeHexString(srcBytes).toUpperCase() +"를 EUC-KR 로 변환 중 오류 발생", e); } return isKSC5601String(srcString); } /** * 매개변수로 받은 문자열의 문자(char)가 모두 KSC5601 코드페이지 범위에 속하면 true, 한 글자라도 속하지 않는 것이 있으면 false를 리턴한다. */ public static boolean isKSC5601String(String srcString){ if(LOG.isDebugEnabled(){ LOG.debug("======== KSC5601 범위:["+KSC5601_START_HEX+"("+KSC5601_START_INT+")~"+KSC5601_END_HEX+"("+KSC5601_END_INT+")]========") } boolean isAllValid = true; //전체 문자열 중 KSC5601에 적합하지 않은 문자가 존재하면 false for(int i=0; i<srcString.length(); i++){ if(! isKSC5601String(srcString.charAt(i))){ isAllValid = false; break; } } if(LOG.isDebugEnabled()){ LOG.debug("## 문자열("+srcString+")의 KSC5601 적합 여부: "+isAllValid); } return isAllValid; } /** * 매개변수로 받은 char가 KSC5601 코드페이지 범위에 속하는 문자이면 true를, 아니면 false를 리턴한다. */ public static boolean isKSC5601Char(char c){ String eachCharString = String.valueOf(c); String hex = null; try{ hex = Hex.encodeHexString(eachCharString.getBytes(CHARSET_EUC_KR); }catch(UnsupportedEncodingException e){ LOG.error("isKSC5601Char() > "+c+" 를 16진수로 변환 중 오류 발생", e); } int decimal = Integer.parseInt(hex, 16); boolean isValid = decimal >= KSC5601_START_INT && decimal <= KSC5601_END_INT; if(LOG.isDebugEnabled()){ LOG.debug("변환된 문자:["+eachCharString+", 16진수:"+hex.toUpperCase()+", 10진수:"+decimal+"],\tKSC5601 적합 여부:"+isValid); } return isValid; }
* 참고 링크
한글 완성형 코드 KSC5601 문자표 (풀버전)
KS X 1001 (구 KSC5601) 위키백과
조합형/완성형/유니코드의 모든 것