한글 완성형 코드 변환 - hangeul wanseonghyeong kodeu byeonhwan

지식잡식

  • 관리
  • 글쓰기
  • 로그인
  • 로그아웃

  • 블로그홈
  • IT지식사전
  • 방명록

IT 실무/웹프로그래밍

한글 ↔ 유니코드 간편 변환기

by 지식id 2018. 2. 3.

반응형

웹상에서 간단한 변환기는 많이 돌아다니는데 옵션은 많고 칸은 좁고 불편하게 돼 있어서 다시 편하게 만들어 보았습니다.

유니코드나 한글을 입력 하시면 자동으로 상호 변환됩니다.

 

유니코드 란

한글 란

복사가 안된다고 문의하시는 분들이 많습니다.

복사가 안되는데 복사가 필요하신 분은 아래 링크 이용해주시면 감사하겠습니다.

Unicode 인코드/디코드 도구

URL 인코드/디코드 도구

반응형

저작자표시 비영리 변경금지

'IT 실무 > 웹프로그래밍' 카테고리의 다른 글

[javascript] 중국 휴대폰번호 정규식  (0)2018.10.23
http 코드 200, 404 등 총망라 정리  (0)2018.02.17
특수문자표, 기본 특수문자 목록  (0)2017.05.06
크기가 다른 블럭이 타일형태로 쌓이는 레이아웃(Masonry) 적용하기  (0)2017.05.06
jQuery Ajax에서 정상적으로 응답이 왔는데 fail 이 호출되는 경우  (0)2017.04.09

태그

디코딩, 변환, 유니코드, 인코딩, 한글

관련글

  • [javascript] 중국 휴대폰번호 정규식
  • http 코드 200, 404 등 총망라 정리
  • 특수문자표, 기본 특수문자 목록
  • 크기가 다른 블럭이 타일형태로 쌓이는 레이아웃(Masonry) 적용하기

댓글18

    비밀글


    현행 한글의 표준은 완성형이지만, 과거에는 조합형과 완성형이 서로 표준자리를 놓고 다투었기에 Unicode에는 조합형의 흔적도 있어요. 물론 지금은 일부 레거시 시스템이나 임베디드 프로그래밍이 아니면 거의 사용할 곳이 없기는 하지만, 그렇다고 해도 조합형 또한 사용할 수 있도록 표준이 제정되있기는 하더라구요.

    한글 완성형은 말 그대로 모든 글자가 각각 하나의 코드로 정의되어 있어서 해당하는 글자를 치면 자동적으로 해당하는 입력이 들어가는 것을 말하구요.
    한글 조합형은, 글자가 아닌 각각의 낱말에 다른 코드가 부여되어 있어 글자를 치면 해당하는 코드가 입력되는 한글 인코딩(표현)방식이에요.

    조합형이 무엇인가에 대해서는
    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진수를 사용하고 있으며, 많은 사이트나 브라우저에서는 자동적으로 완성형으로 변환해서 표현해주기도 하며, 일부 임베비드 시스템에서는 용량이나 처리 문제로 인해 조합형을 사용해야 할 때도 있지요 ㅎㅎ

    그 표는

    한글 완성형 코드 변환 - hangeul wanseonghyeong kodeu byeonhwan

    이런 형상을 띄구요. 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("")#바로 안꺼지고 종료 시 입력을 받도록
       

    위의 코드를 이용하여 돌리면

    한글 완성형 코드 변환 - hangeul wanseonghyeong kodeu byeonhwan

    이런 식으로 결과가 나옵니다. [&#x0]은 값이 없는 것이구요.

    과거 1990년대에는 조합형과 완성형이 한글 표준자리를 놓고 경쟁하기도 하였는데요.

    관련해서는 

    를 참고해 보시는 게 좋을 듯 싶네요.