경축! 아무것도 안하여 에스천사게임즈가 새로운 모습으로 재오픈 하였습니다.
어린이용이며, 설치가 필요없는 브라우저 게임입니다.
https://s1004games.com

C#에서 유니코드를 이용한 한글 자모 분리와 결합

 
 .NET은 기본적으로 UTF-16의 2바이트 유니코드를 사용한다고 보면된다.

완성형 한글의 Unicode 범위는 AC00에서부터 D7AF(정확히는 D79F) 범위에 걸쳐 매핑 되어 있다.  한글 자모의 경우 Unicode 범위는 1100에서부터 11FF 범위에 걸쳐 있다.

   유니코드의 자모값의 코드표
    http://www.unicode.org/charts/PDF/U1100.pdf
   한글 완성형 코드표
    http://www.unicode.org/charts/PDF/UAC00.pdf


# 한글 처리를 위한 기초 함수
한글은 한글자가 초성, 중성, 종성의 기본 자모로 이루어지는 형태의 문자이다.
한글은 24자의 자음과 모음의 조합으로 만들어진다.

    자음 : ㄱㄴㄷㄹㅁㅂㅅㅇㅈㅊㅋㅌㅍㅎ
    모음 : ㅏㅑㅓㅕㅗㅛㅜㅠㅡㅣ

 아래 예제는 완성형 유니코드를 이용하여 자음과 모음을 분리, 결합하는 함수이다.
 유니코드 표를 보면 한글이 사전순으로 정리되어 있다.
 그래서 초성 자음과 종성 자음의 거리 계산하여 각 자음과 모음을 조합할 수 있다.

--------------------------------------------------------------------------------------------------------

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
namespace WpfDynamicControl
{
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();

        }
        // 초성, 중성, 종성 테이블.
        private static string m초성Tbl = "ㄱㄲㄴㄷㄸㄹㅁㅂㅃㅅㅆㅇㅈㅉㅊㅋㅌㅍㅎ";
        private static string m중성Tbl = "ㅏㅐㅑㅒㅓㅔㅕㅖㅗㅘㅙㅚㅛㅜㅝㅞㅟㅠㅡㅢㅣ";
        private static string m종성Tbl = " ㄱㄲㄳㄴㄵㄶㄷㄹㄺㄻㄼㄽㄾㄿㅀㅁㅂㅄㅅㅆㅇㅈㅊㅋㅌㅍㅎ";
        private static ushort mUniCode한글Base = 0xAC00;
        private static ushort mUniCode한글Last = 0xD79F;
        private static string m초성;
        private static string m중성;
        private static string m종성;

        public static string 자소합치기(string s초성, string s중성, string s종성)        {
            int i초성위치, i중성위치, i종성위치;
            int iUniCode;

            i초성위치 = m초성Tbl.IndexOf(s초성);   // 초성 위치
            i중성위치 = m중성Tbl.IndexOf(s중성);   // 중성 위치
            i종성위치 = m종성Tbl.IndexOf(s종성);   // 종성 위치

            // 앞서 만들어 낸 계산식
            iUniCode = mUniCode한글Base + (i초성위치 * 21 + i중성위치) * 28 + i종성위치;

            // 코드값을 문자로 변환
            char temp = Convert.ToChar(iUniCode);
            return temp.ToString();
        }


        public void 자소나누기(char c한글자)
        {
            int i초성Idx, i중성Idx, i종성Idx; // 초성,중성,종성의 인덱스
            ushort uTempCode = 0x0000;       // 임시 코드용

            //Char을 16비트 부호없는 정수형 형태로 변환 - Unicode
            uTempCode = Convert.ToUInt16(c한글자);

            // 캐릭터가 한글이 아닐 경우 처리
            if ((uTempCode < mUniCode한글Base) || (uTempCode > mUniCode한글Last))
            {
                m초성 = ""; m중성 = ""; m종성 = "";
            }

            // iUniCode에 한글코드에 대한 유니코드 위치를 담고 이를 이용해 인덱스 계산.
            int iUniCode = uTempCode - mUniCode한글Base;

            i초성Idx = iUniCode / (21 * 28);
            iUniCode = iUniCode % (21 * 28);
            i중성Idx = iUniCode / 28;
            iUniCode = iUniCode % 28;
            i종성Idx = iUniCode;

            m초성 = new string(m초성Tbl[i초성Idx], 1);
            m중성 = new string(m중성Tbl[i중성Idx], 1);
            m종성 = new string(m종성Tbl[i종성Idx], 1);
        }


        private void button1_Click(object sender, RoutedEventArgs e)
        {
            char cWork ;
            cWork = char.Parse("밟");
           
            자소나누기(cWork);
            txtFirst.Text = m초성;
            txtMiddle.Text = m중성;
            txtLast.Text = m종성;

            txtCompose.Text = 자소합치기(m초성, m중성, m종성);
        }
    }
}
--------------------------------------------------------------------------------------------------------

소스를 한글로 써서 가독성이 좀 떨어지려나?
 
[출처] http://plog2012.blogspot.com/2012/11/c.html
본 웹사이트는 광고를 포함하고 있습니다.
광고 클릭에서 발생하는 수익금은 모두 웹사이트 서버의 유지 및 관리, 그리고 기술 콘텐츠 향상을 위해 쓰여집니다.
번호 제목 글쓴이 날짜 조회 수
64 [C# Apps] Editor3D: A Windows.Forms Render Control with interactive 3D Editor in C# Editor3D: C#의 대화형 3D 편집기가 포함된 Windows.Forms 렌더 컨트롤 file 졸리운_곰 2023.09.03 543
63 [C# app] Pythonnet – .NET Core와 Python의 간단한 결합 : Pythonnet – A Simple Union of .NET Core and Python You’ll Love file 졸리운_곰 2023.03.11 183
62 [C# app] Gidon C# 플러그인 프레임워크에 Python 애플리케이션 포함 : Embedding Python Applications within Gidon C# Plugin Framework file 졸리운_곰 2023.03.07 252
61 [C# App] Gidon - Avalonia 기반 MVVM 플러그인 IoC 컨테이너 : Gidon - Avalonia based MVVM Plugin IoC Container file 졸리운_곰 2023.03.07 168
60 [VS2019] [C#] WinForm에 MySQL 연동하기 file 졸리운_곰 2022.12.25 228
59 [C#] sqlite on C# 예제로 배우는 C# 프로그래밍 file 졸리운_곰 2021.01.30 401
58 Selenium C# Webdriver Tutorial: NUnit Example file 졸리운_곰 2020.01.03 236
57 [C# 인공지능] 유전 알고리즘 : 유전 알고리즘으로 컴퓨터 자동 프로그래밍 AI-Programmer file 졸리운_곰 2019.12.28 391
56 C# 기초로 한글 검색기(초성 포함) 만들기 [Step by Step] file 졸리운_곰 2019.12.11 1832
55 (C#.NET 한글 프로그램 제작) 한글 조립 및 분해 하기 (유니코드 Unicode) file 졸리운_곰 2019.12.11 463
» C#에서 유니코드를 이용한 한글 자모 분리와 결합 졸리운_곰 2019.12.11 1359
53 [C#] GUID 생성. file 졸리운_곰 2019.02.27 329
52 MetaWeblogAPI C# 코드 샘플 졸리운_곰 2019.02.08 367
51 A Look into the Future - Source Code Generation by the Bots file 졸리운_곰 2019.01.23 315
50 Machine Learning with ML.Net and C#/VB.Net file 졸리운_곰 2018.12.14 585
49 Scientific graphics in C# - [part 2] file 졸리운_곰 2018.12.06 5191
48 Scientific graphics in C# [part 1] file 졸리운_곰 2018.12.06 235
47 Application Trial Maker file 졸리운_곰 2018.11.22 341
46 C# 프로젝트에서 C++ 코드 사용 : Use C++ codes in a C# project — unmanaged C++ solution 졸리운_곰 2018.10.30 375
45 C# 으로 구현하는 간단한 뉴럴네트워크 : Implementing Simple Neural Network in C# file 졸리운_곰 2018.10.30 520
대표 김성준 주소 : 경기 용인 분당수지 U타워 등록번호 : 142-07-27414
통신판매업 신고 : 제2012-용인수지-0185호 출판업 신고 : 수지구청 제 123호 개인정보보호최고책임자 : 김성준 sjkim70@stechstar.com
대표전화 : 010-4589-2193 [fax] 02-6280-1294 COPYRIGHT(C) stechstar.com ALL RIGHTS RESERVED