경축! 아무것도 안하여 에스천사게임즈가 새로운 모습으로 재오픈 하였습니다.
어린이용이며, 설치가 필요없는 브라우저 게임입니다.
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
본 웹사이트는 광고를 포함하고 있습니다.
광고 클릭에서 발생하는 수익금은 모두 웹사이트 서버의 유지 및 관리, 그리고 기술 콘텐츠 향상을 위해 쓰여집니다.
번호 제목 글쓴이 날짜 조회 수
100 Visual Studio 2010 Ultimate 정식버전 전환, 정식버전, 정식버전 사용 졸리운_곰 2020.07.26 44
99 Selenium C# Webdriver Tutorial: NUnit Example file 졸리운_곰 2020.01.03 68
98 VB로 웹페이지 읽어오기 - 웹 스크랩 file 졸리운_곰 2020.01.03 183
97 [C# 인공지능] 유전 알고리즘 : 유전 알고리즘으로 컴퓨터 자동 프로그래밍 AI-Programmer file 졸리운_곰 2019.12.28 231
96 C# 기초로 한글 검색기(초성 포함) 만들기 [Step by Step] file 졸리운_곰 2019.12.11 1414
95 (C#.NET 한글 프로그램 제작) 한글 조립 및 분해 하기 (유니코드 Unicode) file 졸리운_곰 2019.12.11 272
» C#에서 유니코드를 이용한 한글 자모 분리와 결합 졸리운_곰 2019.12.11 1213
93 [C#] GUID 생성. file 졸리운_곰 2019.02.27 166
92 MetaWeblogAPI VisualBasic .NET 코드 샘플 졸리운_곰 2019.02.08 272
91 MetaWeblogAPI C# 코드 샘플 졸리운_곰 2019.02.08 252
90 A Look into the Future - Source Code Generation by the Bots file 졸리운_곰 2019.01.23 164
89 Machine Learning with ML.Net and C#/VB.Net file 졸리운_곰 2018.12.14 463
88 Scientific graphics in C# - [part 2] file 졸리운_곰 2018.12.06 3911
87 Scientific graphics in C# [part 1] file 졸리운_곰 2018.12.06 144
86 Window 7 Enterprise 64bit에 vb6 (visual studio 6.0 ent버젼) 설치 file 졸리운_곰 2018.12.04 363
85 Application Trial Maker file 졸리운_곰 2018.11.22 191
84 C# 프로젝트에서 C++ 코드 사용 : Use C++ codes in a C# project — unmanaged C++ solution 졸리운_곰 2018.10.30 199
83 C# 으로 구현하는 간단한 뉴럴네트워크 : Implementing Simple Neural Network in C# file 졸리운_곰 2018.10.30 326
82 Machine Learning with ML.Net and C#/VB.Net file 졸리운_곰 2018.08.16 827
81 오픈소스 닷넷 라이브러리 Awesome .NET! file 졸리운_곰 2018.07.08 2190
대표 김성준 주소 : 경기 용인 분당수지 U타워 등록번호 : 142-07-27414
통신판매업 신고 : 제2012-용인수지-0185호 출판업 신고 : 수지구청 제 123호 개인정보보호최고책임자 : 김성준 sjkim70@stechstar.com
대표전화 : 010-4589-2193 [fax] 02-6280-1294 COPYRIGHT(C) stechstar.com ALL RIGHTS RESERVED