조합형 한글 | C#에서 조합형한글 초성,중성,종성 분해하고 합성하는 방법! 134 개의 가장 정확한 답변

당신은 주제를 찾고 있습니까 “조합형 한글 – C#에서 조합형한글 초성,중성,종성 분해하고 합성하는 방법!“? 다음 카테고리의 웹사이트 ppa.maxfit.vn 에서 귀하의 모든 질문에 답변해 드립니다: https://ppa.maxfit.vn/blog. 바로 아래에서 답을 찾을 수 있습니다. 작성자 심심한녹칸다 이(가) 작성한 기사에는 조회수 119회 및 좋아요 3개 개의 좋아요가 있습니다.

조합형 한글 주제에 대한 동영상 보기

여기에서 이 주제에 대한 비디오를 시청하십시오. 주의 깊게 살펴보고 읽고 있는 내용에 대한 피드백을 제공하세요!

d여기에서 C#에서 조합형한글 초성,중성,종성 분해하고 합성하는 방법! – 조합형 한글 주제에 대한 세부정보를 참조하세요

본 영상은 녹칸다의 C#윈폼 66편의 내용을 요약한 것입니다~!
https://bota.tistory.com/1290

조합형 한글 주제에 대한 자세한 내용은 여기를 참조하세요.

한글 (조합형, 완성형, 유니코드) – 네이버 블로그

MP3 파일의 한글 표시부분 공부를 하다가 Posting 을 합니다. 조합형 한글. 1. 이력 :초창기 한글 코드. 2. 조합 : 2 BYTE 형 기준 ( 1 bit (영문 =0, …

+ 여기에 더 보기

Source: m.blog.naver.com

Date Published: 10/13/2022

View: 4350

조합형 한글

조합형 한글의 특징; 3. 옛 조합형 코드표 (조합형: 삼보, 대우, 현대, 쌍용, 큐닉스); 4. 10x6x4 조합 방식; 5. 옛 조합형과 완성형(KSX1001, 변경 전 KSC5601)간의 …

+ 여기에 더 보기

Source: www.minzkn.com

Date Published: 6/27/2022

View: 9624

조합형 한글, 완성형 한글을 아십니까 – 나를 찾는 아이

한글은 알파벳과는 다르게 초성, 중성, 종성이 모여서 하나의 단어를 … 이게 바로 한글조합형과, 한글완성형인 같지만 서로다른 글자입니다.

+ 여기에 보기

Source: trend21c.tistory.com

Date Published: 9/12/2022

View: 4028

조합형 변환코드 및 인코딩(EUC-KR, UTF-8, CP949) – vbflash

글자조합방식: 조합형 및 완성형은 어떤 것일까? 한글 유니코드의 초성/중성/종성 분리 및 결합방법. 참고자료 Windows API 정복 : 도서 유니코드 …

+ 자세한 내용은 여기를 클릭하십시오

Source: www.vbflash.net

Date Published: 5/10/2022

View: 4247

같은 한글이 아니라고? 유니코드 완성형과 조합형의 차이!

말그대로 한글 조합형(NFD)는 한글을 초성중성종성을 분리하여 유니코드로 표현한 것이다. 예를 들어, ‘템’ 이라고하는 글자가 있다면 ‘ㅌ’, ‘ㅔ’, ‘ㅁ’ …

+ 여기에 자세히 보기

Source: www.reimaginer.me

Date Published: 5/14/2022

View: 1625

[텀즈] (2 바이트) 조합형 한글

조합형 한글코드는 16 비트의 연속된 2 바이트에 코드를 5 비트씩 묶어 초성, 중성, 종성으로 구분한 것이다. 여기서 MSB 즉, 15 번지 비트가 “1”인것은 2바이트 한글 …

+ 여기에 자세히 보기

Source: www.terms.co.kr

Date Published: 5/1/2022

View: 1993

주제와 관련된 이미지 조합형 한글

주제와 관련된 더 많은 사진을 참조하십시오 C#에서 조합형한글 초성,중성,종성 분해하고 합성하는 방법!. 댓글에서 더 많은 관련 이미지를 보거나 필요한 경우 더 많은 관련 기사를 볼 수 있습니다.

C#에서 조합형한글 초성,중성,종성 분해하고 합성하는 방법!
C#에서 조합형한글 초성,중성,종성 분해하고 합성하는 방법!

주제에 대한 기사 평가 조합형 한글

  • Author: 심심한녹칸다
  • Views: 조회수 119회
  • Likes: 좋아요 3개
  • Date Published: 2021. 10. 3.
  • Video Url link: https://www.youtube.com/watch?v=Pv2cb-ftN2A

한글 (조합형, 완성형, 유니코드)

MP3 파일의 한글 표시부분 공부를 하다가 Posting 을 합니다.

조합형 한글

1. 이력 :초창기 한글 코드

2. 조합 : 2 BYTE 형 기준 ( 1 bit (영문 =0, 한글 =1) + 5 bits (초성) + 5 bits (중성) + 5 bits (종성))

3. 장점 : 한글만 볼때는 가장 훌륭한 형태임

4. 단점 : 정렬시 한글 순서대로 Sorting 이 안됨, 다른 언어와 호환성이 약함

3. 코드표

완성형 한글 (KSC 5601 로 명명)

1. 이력 : 1987년 우리나라 국가 표준 코드로 지정한 2 byte 완성형 코드로 한글 2,350 자, 한자 4,887 자, 특수문자 987 자가 사용 가능

2. 조합 : 조합형과 달리 완전한 글자 하나에 코드를 부여하는 방식

3. 장점 : 정렬이 됨

4. 단점 : 표현 불가능한 문자가 있음

5. 기타 : 개선을 위해 누락된 문자를 추가한 확장형 완성형 한글 코드 가 배포되었으나 이는 ASCII 표준을 위배함 (128~159 영역에 문자 코드를 사용)

유니 코드 (ISO/IEC 10649)

1. 이력 : 세계 모든 언어를 통일된 방법으로 표현하기 위해 제안된 국제적인 코드 규약

8 bits 체계의 ASCII 코드를 16 bit 로 확장하여 전 세계 모든 문자를 표현하는 표준 코드임

2. 조합 : 완전한 모든 문자를 2 bytes (총 65536 가지) 에 1대1로 대응되도록 만듬

3. 장점 : 모든 언어에 대해 1대1 대응이 가능하며 파일의 변환 호환에 유리

EUR-KR, UTF-8, UTF-16, UTF-32, UCS-2, UCS-4 와의 한글 코드와 의 관계

1. KSC-5601, Unicode 는 문자 코드이고 이것을 인코딩 하는 Format 이 EUC-KR, UTF-8, UTF-16, UCS-2, UCS-4 등임

2. KSC-5601 => EUC-KR 에 의해 인코딩됨

3. Unicode => UTF-8, UTF-16, UTF-32, UCS-2, USC4 로 인코딩 됨

UTF-x, UCS-x 는 다음 포스트에 내용을 이어감..

참고사항 => 한글 코드 변천 역사

조합형 한글

function utf_string_octets (str){ // 1. 값이 없을 경우 0 return var size = 0; if (!str) { return size; } try { /* 2. 성능면에서 우수한 bytes 계산 로직 실행 -. jhcho: 제일 간결하고 정확한 bytes계산이 이루어지며 속도면에서도 유리할 것으로 보이나 Mobile browser 호환성이 떨어짐. -. https://www.javascripture.com/Blob, https://developer.mozilla.org/ko/docs/Web/API/Blob */ return new Blob([str]).size; } catch (e){ try { /* 3. 호환성면에서 우수한 bytes 계산 로직 실행(2번에서 실패 하였을 경우 실행 ex-모바일) -. UTF-8 웹 상에서는 정상동작하지만 EUC-KR 환경에는 동작 보장되지 않음. -. Browser 호환성 제일 높은 방법 -: 최저 버젼(IE6, IE7, FF 2.0, Safari 3, Opera 9.2) ~ 최신 버젼 */ for ( var i = 0;i < str.length;i++) { var unicode = str.charCodeAt(i); if (unicode <= 0x7f) { // U+0000 ~ U+007F size += 1; } else if (unicode <= 0x7ff) { // U+0080 ~ U+07FF size += 2; } else if (unicode <= 0xffff) { // U+0800 ~ U+FFFF size += 3; } else { // U+10000 ~ U+10FFFF size += 4; } } return size; } catch (e){ return 0; // 예외 } } }

조합형 한글, 완성형 한글을 아십니까

728×90

반응형

언젠가 이와 관련해서 양질의 포스팅을 써보려고 했는데 계속 미루기만할수는 없고 일단 부족하지만 관련 내용을 포스팅해봅니다.

한글은 알파벳과는 다르게 초성, 중성, 종성이 모여서 하나의 단어를 만듭니다

“김”이라는 단어는 “ㄱ”, “ㅣ”, “ㅁ” 이렇게 초성, 중성, 종성 세개의 조합이죠

프로그램 관점에서 보자면

초성, 중성, 종성을 각각 따로 처리하는 방식과

초성, 중성, 종성이 모두 합쳐진 하나의 글자를 처리하는 방식으로 나누어볼수 있습니다

바로 전자가 조립형 한글(NFD)이고, 후자가 완성형한글(NFC)입니다

맥이 대표적으로 NFD를 사용하고 윈도우를 비롯해서 대부분은 NFC를 사용합니다

특히 이 차이를 피부로 느낄수 있는 곳은

맥에서 전송한 파일을 윈도우에서 확인할때

ㅇㅏㄴㄴㅕㅇㅎㅏㅅㅔㅇㅛ.zip

이런식으로 파일이름이 변경되는것을 볼수 있는데요 맥과 윈도우가 한글을 다루는 방법에서 차이가 있기 때문입니다

윈도우는 완성형 한글을 사용하고

맥은 조립형 한글을 사용하기때문입니다.

아래의 샘플을 살펴보겠습니다

urlencode된 한글을 decode하면 실제로는 같은 “안녕하세요” 이지만 두개의 string이 같지 않습니다

실제로 안녕하세요는 5글자이지만 이 두개는 length도 다릅니다

이게 바로 한글조합형과, 한글완성형인 같지만 서로다른 글자입니다

aws s3 콘솔에서 파일업로드를 해봅시다

안녕하세요.xlsx

라는 이름의 파일을 맥에서도 만들어보고, 윈도우에서도 만들어서 업로드해보세요

맥은 조합형한글을 사용하기 때문에 s3 object 주소는 다음과 같은 주소를 갖게 됩니다

https://kkmtest.s3.ap-northeast-2.amazonaws.com/%E1%84%8B%E1%85%A1%E1%86%AB%E1%84%82%E1%85%A7%E1%86%BC%E1%84%92%E1%85%A1%E1%84%89%E1%85%A6%E1%84%8B%E1%85%AD.xlsx

윈도우는 완성형한글을 이용해서 s3 object 주소는 다음과 같은 주소를 갖게 됩니다

https://kkmtest.s3.ap-northeast-2.amazonaws.com/%EC%95%88%EB%85%95%ED%95%98%EC%84%B8%EC%9A%94.xlsx

s3는 같은 파일명을 올리게되면 옵션에 따라 기본적으로 덮어쓰기를 하는데

두개의 파일이 사용자가 보기에는 같은 “안녕하세요.xlsx”지만 모두 s3에 업로드가 되었습니다

url이 일단 길이에서도 확연한차이가 있네요

s3에 한글파일명의 파일을 업로드해서

s3 object가 한글이름으로 되었을때는 이 파일명이 조합형이냐 완성형이냐에 따라

이 s3 object의 주소가 서로 다르게 됩니다

조합형은 “ㅇ”인코딩 %E1%84%8B “ㅏ”인코딩 %E1%85%A1 “ㄴ”인코딩 %E1%86%AB

완성형은 “안”인코딩 %EC%95%88

이런식으로 urlencode를 했기때문에 같은 “안녕하세요”를 encode했지만

서로 다른 결과가 나온것입니다

s3 콘솔화면에서 파일명을 검색할때는 “한글완성형”으로 검색을 하기 때문에 완성형 한글파일명의 파일만 검색이 되고,

조합형으로 만들어진 파일은 한글명이 같더라도 검색되지 않습니다

그리고 많은 툴들이 완성형 한글을 사용하기 때문에

조합형 한글을 사용하면 같은 문제로 인해 이래저래 불편한 일이 많습니다

예를 들어 조합형 한글로 된 데이터를 DB에 저장했다고 합시다

DB툴을 이용해서 where 조건에 해당 한글의 데이터를 찾는 쿼리를 만들때도

대부분이 완성형을 기본으로 사용하기 때문에

분명 일치하는 한글로 검색했지만 완성형으로 조합형의 한글을 검색하려고 한것이기 때문에 원하는 검색결과가 보이지 않습니다

이러한 측면에서 볼때

파일명등을 다룰때는 한글보다는 유니크한 영문과 숫자등으로 구성된 이름을 사용해서 최종 사용자에게 serving할때만 한글로 바꿔주거나

파일명을 normalize 하여 일관되도록 저장하는 방법이 깨끗한 코드에 도움이 될것 같습니다

728×90

반응형

한글 완성형<->조합형 변환코드 및 인코딩(EUC-KR, UTF-8, CP949)

Introduction 이번 포스팅을 준비하는데 있어, 틈틈히 한글(인코딩)과 관련된 자료를 찾아보느라 소요시간이 많이 걸렸습니다. 본 포스팅에서 참조한 레퍼런스는 공개하도록 하겠습니다. 각 페이지에 접속하여 오래된 자료부터 천천히 하나씩 읽어보시는 것을 추천드립니다. 그 이유는 최근 자료들이 만들어지기까지 여러 블로그를 타고 다니며, 조금씩 개선된 부분도 있고 조금 이상한 부분도 있었습니다. 그래서 본 포스팅에서 다루지 못하는 내용들은 참조 링크를 확인 후 필요에 따라 추가 작업을 하시면 좋지 않을까 합니다.

그럼 본 포스팅의 최종 목적은 “인코딩에 문제 없이 코딩하고 싶다.” 입니다. 그래서 iOS, Android, Windows, macOS 등에서 자유롭게 데이터를 주고 받고 싶은것이 목적입니다. 물론 각 플랫폼마다 통신을 주고 받는 방법은 조금만(?) 찾아보면 자료들이 많이 나옵니다. 문제는 한글인데, 한글을 보내면 이상한 외계어로 전달되어버리기 때문입니다. 작업을 하다 너무 싫어서 각각의 플랫폼에 맞춰 인코딩 작업을 할 수 있는 방편을 모두 만들계획입니다. 소스공개는 고민 후 진행하도록 하겠습니다. 본 포스팅의 목차는 다음 파트를 확인 후 원하시는 부분을 찾아 보시면 됩니다.

그럼 시작해볼까요?

Goal

문제점

Socket TCP통신을 할 경우 한글 글자 깨짐 문제

swift <-> Windows C/C++

Goal

인코딩이란?

macos: UTF-8 NFD

Windows: UTF-8 NFC

유니코드

EUC-KR

UTF-8

CP949

한글의 조합형/완성형에 대해 이해하기

한글 자모 분해 (수식&소스코드)

한글 자모 합치기 (수식&소스코드)

활용방안

한글 천지인

보안 키보드

기타 생각해볼 점

글자 입력기를 이용하여 해킹할 수 있는 방법 Idea?

Index

글자조합방식: 조합형 및 완성형은 어떤 것일까?

한글 유니코드의 초성/중성/종성 분리 및 결합방법

참고자료 Windows API 정복 : 도서 유니코드 요약

[C/C++/API/MFC] 기반에서의 한글 변환 코드-01

[C/C++/API/MFC] 기반에서의 한글 변환 코드-02

[C/C++/API/MFC] 기반에서의 한글 변환 코드-03

#코드: 한글 입력시 초성, 중성, 종성 분리

#코드 : 한글 입력시 영문 문자열로 리턴

#코드 : 영문 입력시 한글 문자열로 리턴

#코드 : [영문+한글+특수문자+숫자] 입력시 한글 문자열로 리턴

[C/C++/API/MFC] 기반에서의 한글 변환 코드-04

Reference

인코딩이란?

macos(UTF-8 NFD) 에 대한 자료를 검색해보니 잘정리되어있는 자료가 있어 필요한 부분만 가져오고 나머지는 링크를 이용하여 참조해주시기 바랍니다. [참고: 먼저에 대한 자료를 검색해보니 잘정리되어있는 자료가 있어 필요한 부분만 가져오고 나머지는 링크를 이용하여 참조해주시기 바랍니다. [참고: 한글인코딩이란

NFC(Normalization Form Composition)

GNU/Linux

Windows

설명이 어려워 조금 쉽게 말하자면 다음과 같습니다. 유니코드형태의 완성형으로 저장 을 한다고 보시면 됩니다.

NFD(Normalization Form Decomposition)

macOS

NFD의 경우, 자음과 모음을 분리하여 저장합니다. 즉 조합형의 글자처럼 저장하되 합쳐진 글자가 아닌 분리된 형태로 초성/중성/종성을 저장 합니다.

UTF-8 : 유니코드를 위한 인코딩 방식

Linux, php, mySQL 등 사용

EUC-KR, CP949

웹에서 자주 사용하는 완성형(CP949는 MS에서 사용하는 완성형)

아래 내용들을 다 정리하고 보니, 그럼 무엇이 필요한걸까? 인코딩 normalization 하는 모듈이 필요한 것이 아닐까? 통신과 관련된 작업을 수행할 때 항상 인코딩 문제가 발생할 수 밖에 없다. 이럴 때는 하나의 인코딩형태로 변환하면 끝이지만, 문제는 각 시스템 마다 사용하는 인코딩이 다르기때문에 데이터를 주고 받을 때만 꼭 인코딩/디코딩을 통해 통신을 해야한다. 이를 위해, 기초가 되는 한글의 조합형/완성형을 알아두는 것이 좋은 방법이 아닐까 생각된다. 그리고 한글 외 일본어/중국어/독일어 등 영어를 제외한 다른 언어들에서도 문제가 되기때문에 이번 문제만 해결하게 되면 다른 언어에서도 큰 문제 없이 해결 될 것이라 생각된다.

글자 조합 방식

조합형&완성형 그림참조 : [2014.11.27 한글 인코딩 방식 이해 ]

한글은 조합형 과 완성형 으로 사용되고 있습니다. 조합형 은 자음과 모음을 이용하여 글자를 조합하는 것 으로서 초성, 중성, 종성 으로 구성되어있습니다. 완성형 은 ” 하나의 완성되어있는 글자 ” 로서 초,중,종성이 아닌 ” 가 ” 혹은 ” 글 “, ” 자 ” 처럼 되어있습니다. 블로그의 내용에 따르면 오래된 한글의 표현방식으로서 완성형 문자표에 나타나지 않은 글자는 ” ㅁ ” 등의 형태로 표기가 된다고 합니다. [2014.11.27 한글 인코딩 방식 이해 ]

이어, 조합형이 한글을 표현하는데 있어 가장 확장성이 좋다고하지만, 윈도우의 기본 인코딩 방식은 “CP949 완성형”이라고 합니다. CP949는 무엇인지 알아볼까요? [UTF-8, EUC-KR, CP949] [UTF-8]

개발자들이 원하는 방식(대부분 서버 운용체제/웹 서버/코딩 등에서 사용)

조합형 유니코드 인코딩 방식 사용

ASCII 문자들을 표현 할 수 있음

초성, 중성, 종성을 각각 1바이트로 인식하여 한글을 총 3바이트로 인식함

공백,영문은 1바이트로 인식

유니코드의 경우, 다른 국가에서 한글 언어팩이 설치되지 않아도 한글 표현이 가능함(외국어 표현 가능)

개발자(?) : 켄 톰프슨(1943.02.04~) , 롭 파이크(1956~)

[EUC-KR, CP949 (MS949)]

EUC-KR의 경우는 웹에서 사용

완성현 인코딩 방식(2바이트)

한글을 사용하는 곳에서만 제대로 문자가 보이는 단점

한글과 영어만 사용하는 페이지에서 적합

CP949(MS949) 윈도우에서 사용

완성현 인코딩 방식(2바이트)

MS사가 도입

[참고자료]

상위 참고자료에는 위키백과에 유니코드의 글자가 어떻게 구성되어있는지 표로 나타나 있습니다.

한글 유니코드 초성/중성/종성 분리 및 결합

대부분의 자료를 살펴보면 유니코드에서 한글 (Wiki참조)이 어떻게 구성되어있는지 정리되어있습니다. 한글을 나타내는 유니코드는 초성, 중성, 종성으로 구성되어있고 각각의 세부내용을 살펴보면 다음과 같이 구성되어있습니다. 유니코드의 Table 참조( 자모 , 음절 )

초성(19개)

‘ㄱ’, ‘ㄲ’, ‘ㄴ’, ‘ㄷ’, ‘ㄸ’, ‘ㄹ’, ‘ㅁ’, ‘ㅂ’, ‘ㅃ’, ‘ㅅ’, ‘ㅆ’, ‘ㅇ’, ‘ㅈ’, ‘ㅉ’, ‘ㅊ’, ‘ㅋ’, ‘ㅌ’, ‘ㅍ’, ‘ㅎ’

중성(21개)

‘ㅏ’, ‘ㅐ’, ‘ㅑ’, ‘ㅒ’, ‘ㅓ’, ‘ㅔ’, ‘ㅕ’, ‘ㅖ’, ‘ㅗ’, ‘ㅘ’, ‘ㅙ’, ‘ㅚ’, ‘ㅛ’, ‘ㅜ’, ‘ㅝ’, ‘ㅞ’, ‘ㅟ’, ‘ㅠ’, ‘ㅡ’, ‘ㅢ’, ‘ㅣ’

종성(28개)

공백(‘ ‘),’ㄱ’, ‘ㄲ’, ‘ㄳ’, ‘ㄴ’, ‘ㄵ’, ‘ㄶ’, ‘ㄷ’, ‘ㄹ’, ‘ㄺ’, ‘ㄻ’, ‘ㄼ’, ‘ㄽ’, ‘ㄾ’, ‘ㄿ’, ‘ㅀ’, ‘ㅁ’, ‘ㅂ’, ‘ㅄ’, ‘ㅅ’, ‘ㅆ’, ‘ㅇ’, ‘ㅈ’, ‘ㅊ’, ‘ㅋ’, ‘ㅌ’, ‘ㅍ’, ‘ㅎ’

(※ 종성 첫번째 글자는 공백(‘ ‘) 입니다.

그래서 조합형의 총 글자 수는 11172자 (=19 x 21 x 28) 입니다.

#한글 (유니코드)을 초성/중성/종성으로 분리하는 수식

[1]

초성 = ( ( (characterValue – 종성 ) / 28 ) – 중성 ) / 21

중성 = ( (characterValue – 종성 ) / 28 ) % 21

종성 = characterValue % 28

( 초성 : 0x1100 , 중성 : 0x1161 , 종성 : 0x11A7 )

[3]

(초성인덱스) = ((유니코드 완성형 값)-0xAC00)/(28*21)

(중성인덱스) = ((유니코드 완성형 값)-0xAC00%(28*21))/28)

(종성인덱스) = ((유니코드 완성형 값)-0xAC00)%28

#초성/중성/종성을 이용하여 한글(유니코드) 결합

글자를 조합하기위해서는 초기 한글 코드 값에 초성/중성/종성의 값을 더하면 됩니다. 최종수식은 다음과 같습니다. 참조한 페이지에서는 수식이 조금 달라서 둘다 표기를 하니 참고하시기 바랍니다.

[1] 한글 = 44032(한글 코드 테이블의 첫번째 문자코드번호) + (초성 * 588) + (중성 * 28) + 종성

[2] 한글 = BASE_CODE(한글코드 테이블의 첫번째 문자코드) + 초성 * 21 * 28 + (중성 – 19) * 28 + (종성 – 40)

[3] 한글 = ( ( ( 초성 * 21 ) + 중성 ) * 28 ) + 종성 + 0xAC00

각각의 자료는 포스팅을 하신 분들의 내용을 살펴보시는 것이 혼돈되지 않을까 생각됩니다. 자료 검토할 때, 항상 고민되지만 실제 사용되는 코드를 보게되면 그제서야 이해가 되죠.

아래는 간단하게 한글로 구성된 코드도 있으니 참고 하시기 바랍니다.

한글_베이스 U+AC00 중성_경우의_수 21 종성_경우의_수 28 함수 자소합치기(초성, 중성, 종성) { 완성형글자 = 한글베이스 + (초성 * 중성_경우의_수 * 종성_경우의_수) + (중성 * 종성_경우의 수) + 종성; } 함수 자소나누기(완성형글자) { 초성 = (완성형글자 – 한글_베이스) / (중성_경우의_수 * 종성_경우의_수); 중성 = (완성형글자 – 한글_베이스) % (중성_경우의_수 * 종성_경우의_수) / 종성_경우의_수; 종성 = (완성형글자 – 한글_베이스) % 종성_경우의_수; }

그 외에 위키백과-한글 을 찾아보면 다음과 같은 내용도 있으니 참고하면 좋을 듯 하네요.

[Windows API 정복] 도서 유니코드 요약

SBCS(Single Byte Character Set)

아스키 문자셋이나 ANSI 문자셋처럼 한 바이트로 한 문자를 표현하는 문자 코드

최대 256개 문자 표현 가능

미국의 문자에만 맞게 작성되어 독일어, 불어 등의 특별한 기호를 가진 문자를 표현하기에 부족함

DBCS(Double Byte Character Set)

영문기호는 8비트로 표현

한글은 16비트로 표현하는 ANSI의 확장형 문자 코드

#DBCS 예시 “럭키 Seoul”

7개의 문자로 이루어져 있지만, 배열의 크기는 9바이트

문자의 개수를 정확하게 알 수 없음

IsDBCSLeadByte() 함수를 이용하여 확인 가능

CharPrev(), CharNExt() 함수도 사용가능하나 비효율적으로 권장하지 않음

#유니코드 예시 “럭키 Seoul”

한글/영문 모두 2바이트

Windows 95/98 에서는 유니코드 미지원으로 사용 불가(허걱)

#Windows API에서의 정의

typedef wchar_t WCHAR; // unicode typedef char CHAR; // ANSI

WCHAR(=unsigned short int)

#ifdef UNICODE typedef WCHAR TCHAR; #else typedef char TCHAR; #endif

UNICODE 정의에 따라 타입이 변경됨

기타 정의된 내용은 아래와 같음.

typedef WCHAR *PWCHAR, *LPWSTR, *PWSTR; typedef CONST WCHAR *LPCWCH, *LPCWSTR, *PCWSTR; typedef CHAR *PCHAR, *LPSTR, *PSTR; typedef CONST CHAR *LPCCH, *LPCSTR, *PCSTR;

이를 정리하면 다음과 같이 됨.

그 외에 TextOut 함수의 변형된 함수가 아래와 같이 있음.

ifdef UNICODE #define TExtOut TextOutW // Unicode(Wide) #else #define TextOut TextOutA // ANSI #endif

이런 함수는 TextOutA()함수 는 내부적으로 ANSI에서 유니코드로 변환 후 TextOutW() 함수를 수행함.

그리고 strlen, wcslen, lstrlen, lstrcpy, lstrcat, lstrcmp 등 함수 변환관계를 알아둬야 함.

ANSI <-> UNICODE 변환 코드 참조

int MultiByteToWideChar( UINT CodePage, DWORD dwFlags, LPCSTR lpMultiByteStr, int cbMultiByte, LPWSTR lpWideCharStr, int cchWideChar ); int WideCharToMultiByte( UINT CodePage, DWORD dwFlags, LPCWSTR lpWideCharStr, int cchWideChar, LPSTR lpMultiByteStr, int cbMultiByte, LPCSTR lpDefaultChar, LPBOOL lpUsedDefaultChar ); size_t mbstowcs( wchar_t *wcstr, const char *mbstr, size_t count ); size_t wcstombs( char *mbstr, const wchar_t *wcstr, size_t count ); CA2W() CW2CA() T2A() T2W()

[C/C++/API/MFC] 기반에서의 한글 변환 코드-01

#공식 nChar = Unicode – 0xAC00; 초성: index = nChar / (0x0015 * 0x001C); 중성: index = (nChar / 0x001C) % 0x0015; 종성: index = nChar % 0x001C; #코드 #include #include #include int main(void) { setlocale(LC_ALL, “Korean”); WORD in_char, in_cho, in_jung, in_jong; WORD result; printf(“Input a letter : “); wscanf(L”%c”, &in_char); // 초`중`종성 분해 in_char = in_char – 0xAC00; //in_cho = in_char / (21 * 28); in_cho = in_char / (0x0015 * 0x001C); //in_jung = (in_char / 28) % 21; in_jung = (in_char / 0x001C) % 0x0015; //in_jong = in_char % 28; in_jong = in_char % 0x001C; // 초`중`종성 print if ( in_jong == 0 ) wprintf(L”%c => %c + %c

“, in_char + 0xAC00, in_cho + 0x1100, in_jung + 0x1161); else wprintf(L”%c => %c + %c + %c

“, in_char + 0xAC00, in_cho + 0x1100, in_jung + 0x1161, in_jong + 0x11A7); }

[참고: [ [참고: [ search engine] 한글 초중종성 분리

[C/C++/API/MFC] 기반에서의 한글 변환 코드-02

#코드

#include #include #include #include #include #include static const char * const initial_array[] = { “ㄱ”, “ㄲ”, “ㄴ”, “ㄷ”, “ㄸ”, “ㄹ”, “ㅁ”, “ㅂ”, “ㅃ”, “ㅅ”, “ㅆ”, “ㅇ”, “ㅈ”, “ㅉ”, “ㅊ”, “ㅋ”, “ㅌ”, “ㅍ”, “ㅎ” }; static const char * const medial_array[] = { “ㅏ”, “ㅐ”, “ㅑ”, “ㅒ”, “ㅓ”, “ㅔ”, “ㅕ”, “ㅖ”, “ㅗ”, “ㅘ”, “ㅙ”, “ㅚ”, “ㅛ”, “ㅜ”, “ㅝ”, “ㅞ”, “ㅟ”, “ㅠ”, “ㅡ”, “ㅢ”, “ㅣ” }; static const char * const final_array[] = { “”, “ㄱ”, “ㄲ”, “ㄳ”, “ㄴ”, “ㄵ”, “ㄶ”, “ㄷ”, “ㄹ”, “ㄺ”, “ㄻ”, “ㄼ”, “ㄽ”, “ㄾ”, “ㄿ”, “ㅀ”, “ㅁ”, “ㅂ”, “ㅄ”, “ㅅ”, “ㅆ”, “ㅇ”, “ㅈ”, “ㅊ”, “ㅋ”, “ㅌ”, “ㅍ”, “ㅎ” }; #define count_elements_of(array) (sizeof(array)/sizeof(array[0])) static _Bool DecomposeKoreanSyllable(wchar_t code, wchar_t *initial, wchar_t *medial, wchar_t *final){ const wchar_t num_initial = count_elements_of(initial_array); const wchar_t num_medial = count_elements_of(medial_array); const wchar_t num_final = count_elements_of(final_array); const wchar_t begin = 0xAC00; const wchar_t end = begin + num_initial * num_medial * num_final; if(begin <= code && code < end){ code -= begin; if(final)*final = code % num_final; code /= num_final; if(medial)*medial = code % num_medial; code /= num_medial; if(initial)*initial = code; return true; } else return false; } int main(void){ char buf[80]; setlocale(LC_ALL, ""); mbtowc(0, 0, 0); // reset while(fgets(buf, sizeof(buf), stdin)){ size_t buf_offset = 0, buf_len = strlen(buf); wchar_t wc; int wc_len; while((wc_len = mbtowc(&wc, buf + buf_offset, buf_len - buf_offset)) > 0){ wchar_t initial, medial, final; if(DecomposeKoreanSyllable(wc, &initial, &medial, &final)){ fputs(initial_array[initial], stdout); fputs(medial_array[medial], stdout); fputs(final_array[final], stdout); } buf_offset += wc_len; } } putchar(‘

‘); return 0; }

[ 2017.01.18 KLDP-안녕하세요 “한글” 자음 모음 분리에 관해 질문이 있습니다.! ] [C/C++/API/MFC] 기반에서의 한글 변환 코드-03

#코드: 한글 입력시 초성, 중성, 종성 분리

TCHAR* HangulDisassemble(TCHAR Character) { static const TCHAR Chosung[19]={L’ㄱ’, L’ㄲ’, L’ㄴ’, L’ㄷ’, L’ㄸ’, L’ㄹ’, L’ㅁ’, L’ㅂ’, L’ㅃ’, L’ㅅ’, L’ㅆ’, L’ㅇ’, L’ㅈ’, L’ㅉ’, L’ㅊ’, L’ㅋ’, L’ㅌ’, L’ㅍ’, L’ㅎ’}; static const TCHAR Joongsung[21]={L’ㅏ’, L’ㅐ’, L’ㅑ’, L’ㅒ’, L’ㅓ’, L’ㅔ’, L’ㅕ’, L’ㅖ’, L’ㅗ’, L’ㅘ’, L’ㅙ’, L’ㅚ’, L’ㅛ’, L’ㅜ’, L’ㅝ’, L’ㅞ’, L’ㅟ’, L’ㅠ’, L’ㅡ’, L’ㅢ’, L’ㅣ’}; static const TCHAR Jongsung[28]={L’x’, L’ㄱ’, L’ㄲ’, L’ㄳ’, L’ㄴ’, L’ㄵ’, L’ㄶ’, L’ㄷ’, L’ㄹ’, L’ㄺ’, L’ㄻ’, L’ㄼ’, L’ㄽ’, L’ㄾ’, L’ㄿ’, L’ㅀ’, L’ㅁ’, L’ㅂ’, L’ㅄ’, L’ㅅ’, L’ㅆ’, L’ㅇ’, L’ㅈ’, L’ㅊ’, L’ㅋ’, L’ㅌ’, L’ㅍ’, L’ㅎ’}; static const int CommonNumber=Character-0xAC00; static TCHAR Fragment[4]; int ChosungIndex=(int)(CommonNumber/(28*21)); int JoongsungIndex=(int)((CommonNumber%(28*21))/28); int JongsungIndex=(int)(CommonNumber%28); Fragment[0] = Chosung[ChosungIndex]; Fragment[1] = Joongsung[JoongsungIndex]; Fragment[2] = Jongsung[JongsungIndex]; Fragment[3] = L’\0′; return Fragment; }

#사용방법

TCHAR *pList = HangulDisassemble(L”글”); // pList { ㄱ, ㅡ, ㄹ } 포함

#코드 : 한글 입력시 영문 문자열로 리턴

TCHAR* ReplacementHangulFragment(TCHAR Character) { static const TCHAR Chosung[19][3]={{L”r”}, {L”R”}, {L”s”}, {L”e”}, {L”E”}, {L”f”}, {L”a”}, {L”q”}, {L”Q”}, {L”t”}, {L”T”}, {L”d”}, {L”w”}, {L”W”}, {L”c”}, {L”z”}, {L”x”}, {L”v”}, {L”g”}}; static const TCHAR Joongsung[21][3]={{L”k”}, {L”o”}, {L”i”}, {L”O”}, {L”j”}, {L”p”}, {L”u”}, {L”P”}, {L”h”}, {L”hk”}, {L”ho”}, {L”hl”}, {L”y”}, {L”n”}, {L”nj”}, {L”np”}, {L”nl”}, {L”b”}, {L”m”}, {L”ml”}, {L”l”}}; static const TCHAR Jongsung[28][3]={{L” “}, {L”r”}, {L”R”}, {L”rt”}, {L”s”}, {L”sw”}, {L”sg”}, {L”e”}, {L”f”}, {L”fr”}, {L”fa”}, {L”fq”}, {L”ft”}, {L”fx”}, {L”fv”}, {L”fg”}, {L”a”}, {L”q”}, {L”qt”}, {L”t”}, {L”T”}, {L”d”}, {L”w”}, {L”c”}, {L”z”}, {L”x”}, {L”v”}, {L”g”}}; const int CommonNumber=Character-0xAC00; static TCHAR ReplacementFragment[10]; int ChosungIndex=(int)(CommonNumber/(28*21)); int JoongsungIndex=(int)((CommonNumber%(28*21))/28); int JongsungIndex=(int)(CommonNumber%28); wcscpy(ReplacementFragment, Chosung[ChosungIndex]); wcscat(ReplacementFragment, Joongsung[JoongsungIndex]); if( JongsungIndex != 0 ) { wcscat(ReplacementFragment, Jongsung[JongsungIndex]); } return ReplacementFragment; }

#사용방법

TCHAR *pList = HangulDisassemble(L”글”); // pList { r, m, f } 포함

#코드 : 영문 입력시 한글 문자열로 리턴

void TypingEnglish(TCHAR* Message) { TCHAR NumSpecialChar[11]=L”)!@#$%^&*(“; TCHAR SpecialChar[12]=L”`-=\\[];’,./”; TCHAR ShiftSpecialChar[12]=L”~_+|{}:\”<>?”; BYTE SpecialCharCode[11]={0xC0, 0xBD, 0xBB, 0xDC, 0xDB, 0xDD, 0xBA, 0xDE, 0xBC, 0xBE, 0xBF}; int Length=wcslen(Message); for(int i=0; i= L’a’ && Message[i] <= L'z' ) { keybd_event((BYTE)Message[i]-L'a'+L'A', 0, 0, 0); keybd_event((BYTE)Message[i]-L'a'+L'A', 0, KEYEVENTF_KEYUP, 0); } else if( Message[i] >= L’A’ && Message[i] <= L'Z' ) { keybd_event(VK_SHIFT, 0, 0, 0); keybd_event((BYTE)Message[i], 0, 0, 0); keybd_event((BYTE)Message[i], 0, KEYEVENTF_KEYUP, 0); keybd_event(VK_SHIFT, 0, KEYEVENTF_KEYUP, 0); } else if( Message[i] >= L’0′ && Message[i] <= L'9' ) { keybd_event((BYTE)Message[i], 0, 0, 0); keybd_event((BYTE)Message[i], 0, KEYEVENTF_KEYUP, 0); } else if( Message[i] == L' ' ) { keybd_event((BYTE)Message[i], 0, 0, 0); keybd_event((BYTE)Message[i], 0, KEYEVENTF_KEYUP, 0); } else { for(int j=0; j<10; j++) { if( Message[i] == NumSpecialChar[j] ) { keybd_event(VK_SHIFT, 0, 0, 0); keybd_event(L'0'+j, 0, 0, 0); keybd_event(L'0'+j, 0, KEYEVENTF_KEYUP, 0); keybd_event(VK_SHIFT, 0, KEYEVENTF_KEYUP, 0); break; } if( j == 9 ) { for(int k=0; k<11; k++) { if( Message[i] == SpecialChar[k] ) { keybd_event(SpecialCharCode[k], 0, 0, 0); keybd_event(SpecialCharCode[k], 0, KEYEVENTF_KEYUP, 0); break; } else if( Message[i] == ShiftSpecialChar[k] ) { keybd_event(VK_SHIFT, 0, 0, 0); keybd_event(SpecialCharCode[k], 0, 0, 0); keybd_event(SpecialCharCode[k], 0, KEYEVENTF_KEYUP, 0); keybd_event(VK_SHIFT, 0, KEYEVENTF_KEYUP, 0); break; } } } } } } } #코드 : [영문+한글+특수문자+숫자] 입력시 한글 문자열로 리턴 void TypingMessage(TCHAR* Message) { static TCHAR Buf[10]; int Length=wcslen(Message); for(int i=0; i= 0xAC00 && Message[i] <= 0xD7A3 ) // 한글 범위 검사 { wcscpy(Buf, ReplacementHangulFragment(Message[i])); TypingEnglish(Buf); } else { Buf[0] = Message[i]; Buf[1] = L'\0'; keybd_event(VK_HANGEUL, MapVirtualKey(VK_HANGEUL, 0), 0, 0); keybd_event(VK_HANGEUL, MapVirtualKey(VK_HANGEUL, 0), KEYEVENTF_KEYUP, 0); TypingEnglish(Buf); keybd_event(VK_HANGEUL, MapVirtualKey(VK_HANGEUL, 0), 0, 0); keybd_event(VK_HANGEUL, MapVirtualKey(VK_HANGEUL, 0), KEYEVENTF_KEYUP, 0); } } } [C/C++/API/MFC] 기반에서의 한글 변환 코드-04 #코드 #include "stdafx.h" #include #include int start[3] = {0x1100, 0x1161, 0x11A8 – 1}; int value, cho, jung, jong; bool extract(wchar_t *str) { // 변수 초기화 value = cho = jung = jong = 0; // 문자열 검사 (한글만 입력되었는가?) for(int i = 0; i 0xD7A3) { if(str[i] == 0x20) continue; return false; } } for(int i = 0; i

같은 한글이 아니라고? 유니코드 완성형과 조합형의 차이!

반응형

뭐라고???

기존에 s3에 있는 한글 이름을 가진 엑셀 파일을 변경하고 싶어서 맥에서 같은 이름의 엑셀 파일을 만들어서 다시 업로드했다. 그런데, 덮어써지지 않았다. 엥? 그래서 이래저래 삽질을 하다보니 유니코드에서 한글의 조합형(NFD)과 완성형(NFC)이 있다는 것을 알게 되었고, 맥은 조합형을 사용한 다는 것을 알게 되었다. 그래서 엑셀 파일을 구글 드라이브를 통해서 만들고 다시 s3에 업로드 했더니 잘 되었다.

말그대로 한글 조합형(NFD)는 한글을 초성중성종성을 분리하여 유니코드로 표현한 것이다.

예를 들어, ‘템’ 이라고하는 글자가 있다면 ‘ㅌ’, ‘ㅔ’, ‘ㅁ’이라고 분리해서 유니코드로 표현한다.

템 NFD

완성형(NFC)는 완성된 하나의 글자를 유니코드로 표현한 것이다.

예를 들어, ‘템’이라고 하는 글자가 있다면, ‘템’ 이렇게 하나의 글자 자체를 유니코드로 표현한다.

템 NFC

특이한 점은 같은 자모음이더라도 NFC, NFD에 따라서 유니코드가 다른 것이다.

윈도우에서 ‘ㅌㅔㅁㅍㅡㄹㄹㅣㅅ’ 이런 형태의 파일명을 간혹 본 사람이 있을 텐데, 조합형으로 작성된 파일명이 윈도우에서는 완성형 형태로 표현되어서 발생하는 이슈이다.

참고 링크

반응형

키워드에 대한 정보 조합형 한글

다음은 Bing에서 조합형 한글 주제에 대한 검색 결과입니다. 필요한 경우 더 읽을 수 있습니다.

이 기사는 인터넷의 다양한 출처에서 편집되었습니다. 이 기사가 유용했기를 바랍니다. 이 기사가 유용하다고 생각되면 공유하십시오. 매우 감사합니다!

사람들이 주제에 대해 자주 검색하는 키워드 C#에서 조합형한글 초성,중성,종성 분해하고 합성하는 방법!

  • 녹칸다
  • 아두이노
  • 강의
  • arduino
  • C#
  • 윈폼
  • 한글
  • 조합형
  • 초성
  • 중성
  • 종성
  • 분리
  • 분해
  • 합성

C#에서 #조합형한글 #초성,중성,종성 #분해하고 #합성하는 #방법!


YouTube에서 조합형 한글 주제의 다른 동영상 보기

주제에 대한 기사를 시청해 주셔서 감사합니다 C#에서 조합형한글 초성,중성,종성 분해하고 합성하는 방법! | 조합형 한글, 이 기사가 유용하다고 생각되면 공유하십시오, 매우 감사합니다.

Leave a Comment