유니코드의 한글은 &hAC00부터 시작하며 초성은 19자, 중성은 21자, 종성은 28자로 이루어저있으면 종성의 첫자는 종성이 없음을 나타냅니다.
그러면 유니코드는 어떤식으로 어떤식으로 생성이되냐면 초성,중성,종성을 각 구성된 자리 수 만큼 곱한 값을 더한 값이니다. 여기에 유니코드 한글 시작값 &hAC00을 더한 값이 유니코드가 됩니다.
이런 형태입니다. 우리가 10시 20분 17초를 초로 환산하면 (10*60 * 60) + (20 * 60) + 17 계산을 하면 37217초라는 값이 나옵니다.
이와 같은 형태로 초성에는 21*28을 곱한 값을 중성에는 28을 곱한 값을 나머지 종성 값을 더한후에 &HAC00을 더하게 되면 유니코드 값이됩니다. 반대로 유니코드를 초성,중성,종성으로 분리 하기 위해서는 먼저 &HAC00를 뺀 갑에서 21*28로 나누눈 값이 초성이 될거이고 나머지 값에서 28로 나눈 값이 중성이고, 그 나머지 값이 종성이 됩니다.
다음은 소스의 초기 화면입니다
다음은 텍스트 박스에 한글을 입력하고 초성,중성,종성을 분리한 이미지 입니다.
만약 텍스트 박스에 완성되지 않은 한글이나, 한글이 아닌 문자를 입력한 경우는 메세지 박스가 표시됩니다.
소스입니다.
' 유니코드 한글 문자 초중종성 분리하기
Option Explicit
Private FirstChar(18) As String ' 초성 테이블 19자
Private MiddleChar(20) As String ' 중성 테이블 21자
Private EndChar(27) As String ' 종성 테이블 28자
Private Sub Form_Load()
CreateCopyTable Array("ㄱ", "ㄲ", "ㄴ", "ㄷ", "ㄸ", "ㄹ", "ㅁ", "ㅂ", "ㅃ", "ㅅ", "ㅆ", "ㅇ", "ㅈ", "ㅉ", "ㅊ", "ㅋ", "ㅌ", "ㅍ", "ㅎ"), FirstChar
CreateCopyTable Array("ㅏ", "ㅐ", "ㅑ", "ㅒ", "ㅓ", "ㅔ", "ㅕ", "ㅖ", "ㅗ", "ㅘ", "ㅙ", "ㅚ", "ㅛ", "ㅜ", "ㅝ", "ㅞ", "ㅟ", "ㅠ", "ㅡ", "ㅢ", "ㅣ"), MiddleChar
CreateCopyTable Array(vbNullString, "ㄱ", "ㄲ", "ㄳ", "ㄴ", "ㄵ", "ㄶ", "ㄷ", "ㄹ", "ㄺ", "ㄻ", "ㄼ", "ㄽ", "ㄾ", "ㄿ", "ㅀ", "ㅁ", "ㅂ", "ㅄ", "ㅅ", "ㅆ", "ㅇ", "ㅈ", "ㅊ", "ㅋ", "ㅌ", "ㅍ", "ㅎ"), EndChar
End Sub
Private Sub txtInputChar_KeyDown(KeyCode As Integer, Shift As Integer)
Dim FirstCharCode As Long
Dim MiddleCharCode As Long
Dim EndCharCode As Long
If Not KeyCode = vbKeyReturn Then Exit Sub
If Not Len(txtInputChar) = 1 Then Exit Sub
If SplitHangul(AscW(Left(txtInputChar.Text, 1)), FirstCharCode, MiddleCharCode, EndCharCode) Then
labFirstChar.Caption = FirstChar(FirstCharCode)
labMiddleChar.Caption = MiddleChar(MiddleCharCode)
labLastChar.Caption = EndChar(EndCharCode)
Else
MsgBox "한글 문자가 아닙니다"
End If
End Sub
Private Sub CreateCopyTable(Sou As Variant, Des() As String) ' Variant 테이블을 스트링 테이블에 복사
Dim ForCount As Long
Dim EndCount As Long
EndCount = UBound(Sou)
For ForCount = 0 To EndCount
Des(ForCount) = Sou(ForCount)
Next ForCount
End Sub
Private Function SplitHangul(InCode As Integer, first As Long, middle As Long, last As Long) As Boolean ' 한글의 초중종성 분리
Dim Code As Long
SplitHangul = False
Code = InCode
Select Case Sgn(InCode)
Case -1 ' 음수
If InCode < &HAC00 Then Exit Function
Case 1, 0 '양수
Exit Function
End Select
Code = Code - &HAC00
first = Int(Code / (21 * 28)) ' 초성을 분리합니다.
Code = Code Mod (21 * 28) ' 전체 코드에서 초성을 떼어내고 중성과 종성을 남깁니다.
middle = Int(Code / 28) '중성을 분리합니다.
last = Code Mod 28 ' 중성을 떼어내고 종성을 남깁니다.
SplitHangul = True
End Function
다음 링크는 윈도우에서 한글을 사용하게 되는 경우 코드 페이지 949의 코드 문자표 링크입니다.
http://msdn.microsoft.com/en-us/goglobal/cc305154
'VB6' 카테고리의 다른 글
vb6에서 정규식으로 문자열을 찾자. (0) | 2011.09.16 |
---|---|
소수를 분수로 바꾸기 (0) | 2011.09.16 |
가상 레코드셋(컨넥션이 없이 레코드셋 구조 생성) (0) | 2011.09.08 |
유니코드, ANSI코드 확인 (0) | 2011.09.06 |
DB 컨넥션 없이 레코드셋 생성하기(저장 파일 사용) (0) | 2011.09.05 |