기글 하드웨어 질문 게시판
각종 질문을 올릴 수 있는 곳입니다. 먼저 검색해 보고 질문을 올리는 것이 더 효율적입니다. 충분한 정보와 예의를 갖춰 글을 작성해 주시고 문제가 해결되면 꼭 댓글을 달아 주세요.
영어나 일본어는 abcd 이렇게 그냥 순선대로 쓰면되고 다른 언어도 마찬가지입니다.
그런데 한글은..
ㄷ
ㅏ=다
ㄹ=달
ㄱ=닭
타자를 치면 이렇게 글자들이 이렇게 구성되는데
ㄷ과 ㅏ를 치면 다 가 되는데 이것을 구현하려면 다른 언어들과는 달리
ㄷ+ㅏ=다
다+ㄹ=달
달+ㄱ+닭
위의 정보를 가지고 있어야 하는데 유니코드에서 어떻게 처리하는지 궁금합니다.
위의 방식대로 할려면 한글폰트용량의 몇배나 되는 정보를 문자처리기?가 가지고 있어야 할텐데 설마 그렇게 비효율적일 것 같지는 않고 따로 무슨 알고리듬이 존재하나요?
ㄷ누르면 ㄷ공간으로 가고 ㅏ 누르면 ㄷ의 ㅏ열을 찾아가고, 받침도 ㄹ행 ㄺ 뭐 이렇게 찾아가는 방식일까요?
@가갸거겨고교구규그기
ㄱ
ㄴ
ㄷ
ㄹ
ㅁ
ㅂ
2016.04.18 04:09:51
쮸쀼쮸쀼님 말씀데로 한글을 조합에서 입력하는 기능은 유니코드가 아닌 IME(입력기)가 당담하는 부분입니다. 그리고 조합 수가 11,172개 밖에 되지 않기 때문에 지금의 컴퓨터에서는 쉽게 구현할 수 있지요.
2016.04.19 06:26:32
http://d2.naver.com/helloworld/76650
여기서 인용하겠습니다.
“한글 음절의 코드 포인트 값은 시작 값인 U+AC00에 ((초성 값 x 21) + 중성 값) x 28 + 종성 값을 더하면 된다. 예를 들어, '한'이라는 글자는 'ㅎ', 'ㅏ', 'ㄴ'으로 구성되어 있으며, 각각 18, 0, 4 값을 가지고 있으므로, '한'의 코드 포인트 값은 U+AC00 + ((18 x 21) + 0) x 28 + 4 = U+AC00 + U+295C = U+D55C가 된다. 이를 역으로 생각해 보면, 한글 음절에 대해 초성, 중성, 종성의 분리가 가능하다. 즉 한글 음절의 코드 포인트 값에서 U+AC00을 뺀 값을 ①이라 한다면, 다음과 같이 정리할 수 있다.
* ①의 값을 (21 x 28)로 나눈 몫은 초성
* ①의 값을 (21 x 28)로 나눈 나머지를, 28로 나눈 몫은 중성
* ①의 값을 28로 나눈 나머지는 종성”
제가 올렸던 코드 또한 이걸 보고 작성한 것입니다.
여기서 인용하겠습니다.
“한글 음절의 코드 포인트 값은 시작 값인 U+AC00에 ((초성 값 x 21) + 중성 값) x 28 + 종성 값을 더하면 된다. 예를 들어, '한'이라는 글자는 'ㅎ', 'ㅏ', 'ㄴ'으로 구성되어 있으며, 각각 18, 0, 4 값을 가지고 있으므로, '한'의 코드 포인트 값은 U+AC00 + ((18 x 21) + 0) x 28 + 4 = U+AC00 + U+295C = U+D55C가 된다. 이를 역으로 생각해 보면, 한글 음절에 대해 초성, 중성, 종성의 분리가 가능하다. 즉 한글 음절의 코드 포인트 값에서 U+AC00을 뺀 값을 ①이라 한다면, 다음과 같이 정리할 수 있다.
* ①의 값을 (21 x 28)로 나눈 몫은 초성
* ①의 값을 (21 x 28)로 나눈 나머지를, 28로 나눈 몫은 중성
* ①의 값을 28로 나눈 나머지는 종성”
제가 올렸던 코드 또한 이걸 보고 작성한 것입니다.
작성된지 2주일이 지난 글에는 새 코멘트를 달 수 없습니다.
말씀하신 것은 [한글 오토마타]라고 하는 것으로, 이거는 유니코드에 있는 것이 아니라 개발자가 직접 구현을 해야 하는 것입니다. 직접 검색해보시면 많은 정보가 있을 것입니다. 혹시 한글 낱자를 초·중·종성으로 분해하거나 결합하는 부분이 궁금하시다면, 제가 얼마 전에 썼던 http://gigglehd.com/zbxe/14052329 이 코드를 잘 들여다보시면 힌트가 될 수 있을 겁니다.