한글 완성형은 말 그대로 모든 글자가 각각 하나의 코드로 정의되어 있어서 해당하는 글자를 치면 자동적으로 해당하는 입력이 들어가는 것을 말하구요.
한글 조합형은, 글자가 아닌 각각의 낱말에 다른 코드가 부여되어 있어 글자를 치면 해당하는 코드가 입력되는 한글 인코딩(표현)방식이에요.
조합형이 무엇인가에 대해서는
https://ko.wikipedia.org/wiki/%ED%95%9C%EA%B8%80_%EC%A1%B0%ED%95%A9%ED%98%95_%EC%9D%B8%EC%BD%94%EB%94%A9
에 간략하게 표현되어 있구요.
한글 유니코드표는 16진수를 사용하고 있으며, 많은 사이트나 브라우저에서는 자동적으로 완성형으로 변환해서 표현해주기도 하며, 일부 임베비드 시스템에서는 용량이나 처리 문제로 인해 조합형을 사용해야 할 때도 있지요 ㅎㅎ
그 표는
이런 형상을 띄구요. Number는 순서를, character reference는 해당 기호를 나타내는 기본값을 말해요.
이를 이용해서 관련 변환 코드를 짜 보기도 했는데요.
이 코드를 이용하면, 단어를 해당하는 조합형 문자열로 쉽게 바꿔서 이용하실 수 있어요 ㅎㅎ
# -*- coding: utf-8 -*- import re # 유니코드 한글 시작 : 44032, 끝 : 55199 BASE_CODE, CHOSUNG, JUNGSUNG = 44032, 588, 28 CHAR_List = [] count = 1; # 초성 리스트. 00 ~ 18 CHOSUNG_LIST = ['ㄱ', 'ㄲ', 'ㄴ', 'ㄷ', 'ㄸ', 'ㄹ', 'ㅁ', 'ㅂ', 'ㅃ', 'ㅅ', 'ㅆ', 'ㅇ', 'ㅈ', 'ㅉ', 'ㅊ', 'ㅋ', 'ㅌ', 'ㅍ', 'ㅎ'] # 중성 리스트. 00 ~ 20 JUNGSUNG_LIST = ['ㅏ', 'ㅐ', 'ㅑ', 'ㅒ', 'ㅓ', 'ㅔ', 'ㅕ', 'ㅖ', 'ㅗ', 'ㅘ', 'ㅙ', 'ㅚ', 'ㅛ', 'ㅜ', 'ㅝ', 'ㅞ', 'ㅟ', 'ㅠ', 'ㅡ', 'ㅢ', 'ㅣ'] # 종성 리스트. 00 ~ 27 + 1(1개 없음) JONGSUNG_LIST = [' ', 'ㄱ', 'ㄲ', 'ㄳ', 'ㄴ', 'ㄵ', 'ㄶ', 'ㄷ', 'ㄹ', 'ㄺ', 'ㄻ', 'ㄼ', 'ㄽ', 'ㄾ', 'ㄿ', 'ㅀ', 'ㅁ', 'ㅂ', 'ㅄ', 'ㅅ', 'ㅆ', 'ㅇ', 'ㅈ', 'ㅊ', 'ㅋ', 'ㅌ', 'ㅍ', 'ㅎ'] if __name__ == '__main__': test_keyword = input("문자를 입력하세요: ") split_keyword_list = list(test_keyword) print(split_keyword_list) result = list() for keyword in split_keyword_list: #초성 중성 종성 넘버링 BASE_CHO_NUMBER = 4352 BASE_JUNG_NUMBER = 4449 BASE_JONG_NUMBER = 4519 # 한글 여부 check 후 분리 if re.match('.*[ㄱ-ㅎㅏ-ㅣ가-힣]+.*', keyword) is not None: char_code = ord(keyword) - BASE_CODE char1 = int(char_code / CHOSUNG) result.append(CHOSUNG_LIST[char1]) BASE_CHO_NUMBER = BASE_CHO_NUMBER + char1 CHAR_List.insert(count, "&#x"+hex(BASE_CHO_NUMBER)[2:]) count = count +1; print('초성 : {}'.format(CHOSUNG_LIST[char1])) char2 = int((char_code - (CHOSUNG * char1)) / JUNGSUNG) result.append(JUNGSUNG_LIST[char2]) BASE_JUNG_NUMBER = BASE_JUNG_NUMBER + char2 CHAR_List.insert(count, "&#x"+hex(BASE_JUNG_NUMBER)[2:]) count = count +1; print('중성 : {}'.format(JUNGSUNG_LIST[char2])) char3 = int((char_code - (CHOSUNG * char1) - (JUNGSUNG * char2))) result.append(JONGSUNG_LIST[char3]) BASE_JONG_NUMBER = BASE_JONG_NUMBER + char3 if char3 is 0: BASE_JONG_NUMBER = 0000 CHAR_List.insert(count, "&#x"+hex(BASE_JONG_NUMBER)[2:]) count = count +1; print('종성 : {}'.format(JONGSUNG_LIST[char3])) else: result.append(keyword) # result print("Unicode 단어 -> Unicode 조합형 문자열로 변환한 결과") print(CHAR_List) print("".join(result)) exit = input("")#바로 안꺼지고 종료 시 입력을 받도록
위의 코드를 이용하여 돌리면
이런 식으로 결과가 나옵니다. [�]은 값이 없는 것이구요.
완성형 한글 코드표 참고 http://kkamagui.tistory.com/234
과거 1990년대에는 조합형과 완성형이 한글 표준자리를 놓고 경쟁하기도 하였는데요.
관련해서는
를 참고해 보시는 게 좋을 듯 싶네요.
댓글 없음:
댓글 쓰기
글에 대한 의문점이나 요청점, 남기고 싶은 댓글이 있으시면 남겨 주세요. 단 악성 및 스팸성 댓글일 경우 삭제 및 차단될 수 있습니다.
모든 댓글은 검토 후 게시됩니다.