/// <summary> /// 한글자의 한글을 초성, 중성, 종성으로 나눈다. /// </summary> /// <param name="hanChar">한글</param> /// <returns>분리된 한글에 대한 정보</returns> /// <seealso cref="HANGUL_INFO"/> /// <remarks> /// <para> /// 한글자의 한글을 초성, 중성, 종성으로 나눈다. /// </para> /// <example> /// <code> /// HANGUL_INFO hinfo = DevideJaso('강'); /// // hinfo.isHangul -> "H" (한글) /// // hinfo.originalChar -> 강 /// // hinfo.chars[0] -> ㄱ, hinfo.chars[1] -> ㄴ, hinfo.chars[2] = ㅇ /// </code> /// </example> /// </remarks> public static HANGUL_INFO DevideJaso(char hanChar) { int ChoSung, JungSung, JongSung; ushort temp = 0x0000; HANGUL_INFO hi = new HANGUL_INFO(); //Char을 16비트 부호없는 정수형 형태로 변환 - Unicode temp = Convert.ToUInt16(hanChar); // 캐릭터가 한글이 아닐 경우 처리 if ((temp < m_UniCodeHangulBase) || (temp > m_UniCodeHangulLast)) { hi.isHangul = "NH"; hi.originalChar = hanChar; hi.chars = null; } else { // nUniCode에 한글코드에 대한 유니코드 위치를 담고 이를 이용해 인덱스 계산. int nUniCode = temp - m_UniCodeHangulBase; ChoSung = nUniCode / (21 * 28); nUniCode = nUniCode % (21 * 28); JungSung = nUniCode / 28; nUniCode = nUniCode % 28; JongSung = nUniCode; hi.isHangul = "H"; hi.originalChar = hanChar; hi.chars = new char[] { HTable_ChoSung[ChoSung], HTable_JungSung[JungSung], HTable_JongSung[JongSung] }; } return(hi); }
/// <summary> /// 한글자의 한글을 초성, 중성, 종성으로 나눈다. /// </summary> /// <param name="hanChar">한글</param> /// <returns>분리된 한글에 대한 정보</returns> /// <seealso cref="HANGUL_INFO"/> /// <remarks> /// <para> /// 한글자의 한글을 초성, 중성, 종성으로 나눈다. /// </para> /// <example> /// <code> /// HANGUL_INFO hinfo = DevideJaso('강'); /// // hinfo.isHangul -> "H" (한글) /// // hinfo.originalChar -> 강 /// // hinfo.chars[0] -> ㄱ, hinfo.chars[1] -> ㄴ, hinfo.chars[2] = ㅇ /// </code> /// </example> /// </remarks> public static HANGUL_INFO DevideJaso(string val) { int ChoSung, JungSung, JongSung; // 초성,중성,종성의 인덱스 ushort temp = 0x0000; // 임시로 코드값을 담을 변수 HANGUL_INFO hi = new HANGUL_INFO(); hi.originalVal = val; hi.isHangul = false; hi.splitstring = ""; hi.chosung = ""; hi.jungsung = ""; hi.jongsung = ""; if (!string.IsNullOrEmpty(val)) { foreach (char hanChar in val) { //Char을 16비트 부호없는 정수형 형태로 변환 - Unicode temp = Convert.ToUInt16(hanChar); // 캐릭터가 한글이 아닐 경우 처리 if ((temp < m_UniCodeHangulBase) || (temp > m_UniCodeHangulLast)) { hi.splitstring += hanChar; if (!HTable_JungSung.Contains(hanChar)) { hi.chosung += hanChar; hi.jungsung += " "; } else { hi.chosung += " "; hi.jungsung += hanChar; } hi.jongsung += " "; } else { hi.isHangul = true; // nUniCode에 한글코드에 대한 유니코드 위치를 담고 이를 이용해 인덱스 계산. int nUniCode = temp - m_UniCodeHangulBase; ChoSung = nUniCode / (21 * 28); nUniCode = nUniCode % (21 * 28); JungSung = nUniCode / 28; nUniCode = nUniCode % 28; JongSung = nUniCode; var tmpChar = new char[] { HTable_ChoSung[ChoSung], HTable_JungSung[JungSung], HTable_JongSung[JongSung] }; string tmpData = ""; tmpData = HTable_ChoSung[ChoSung].ToString(); hi.chosung += string.IsNullOrEmpty(tmpData) ? " " : tmpData; tmpData = HTable_JungSung[JungSung].ToString(); hi.jungsung += string.IsNullOrEmpty(tmpData) ? " " : tmpData; tmpData = HTable_JongSung[JongSung].ToString(); hi.jongsung += string.IsNullOrEmpty(tmpData) ? " " : tmpData; foreach (var dchar in tmpChar) { hi.splitstring += dchar; } } } } return(hi); }