본문 바로가기
프로그래밍/ASP

[본문스크랩] 한자->한글로 변환하기

by 백룡화검 2010. 4. 23.
Attribute VB_Name = "modHanmun"
Option Explicit

Global Const hanmun_tbl = "伽刻侃乫勘匣剛介喀坑醵倨乾乞儉劫偈擊堅抉兼京係古哭困汨供串寡廓串" _
                        & "刮侊卦乖宏交丘國君堀宮倦厥机句叫勻橘克僅契今伋亘企緊佶金喫儺樂亂" _
                        & "捏南拉囊乃冷女年念寧努碌論壟惱尿壘嫩訥杻勒凜凌尼匿多丹撻啖沓唐" _
                        & "代宅德倒毒墩乭仝兜屯得嶝喇樂丹剌嵐拉廊來冷掠亮侶力憐冽廉獵令例勞" _
                        & "碌論壟儡了龍壘劉六侖律隆勒凜凌俚吝林砬摩寞万唜亡埋脈孟冪免滅冥" _
                        & "袂侮木歿夢卯務墨們勿味岷密剝伴勃倣倍伯幡伐凡法僻便別丙保伏本乶俸" _
                        & "不北分不崩丕嚬憑乍削傘乷三揷上塞嗇牲墅夕仙卨剡攝城世召俗孫率宋刷" _
                        & "衰修叔巡戌崇瑟濕丞侍埴伸失審什雙氏亞堊安斡唵壓仰厓厄櫻也弱亮圄億" _
                        & "偃孼俺嶪円予亦嚥列厭曄令乂五屋溫兀壅渦婉曰往倭外了慾俑于勖云蔚熊" _
                        & "元月位乳六倫律戎垠乙吟揖凝依二匿人一任入仍仔作孱岑雜丈再爭佇勣佃" _
                        & "切占接丁制俎族存卒倧佐罪主竹俊茁中卽櫛楫增之直唇侄斟什徵且捉撰刹" _
                        & "僭倉債冊凄倜仟凸僉堞廳切初促寸叢撮催墜丑春出充悴取側層侈則親七侵" _
                        & "蟄秤快他倬呑奪探塔宕兌宅撑攄兎慟堆偸慝闖坡判八佩彭愎便貶坪吠佈幅" _
                        & "俵品楓彼匹乏下壑寒割函合亢亥劾倖享噓憲歇險奕俔孑嫌俠亨兮乎惑婚忽" _
                        & "哄化廓丸活凰匯劃宖哮侯勛薨喧卉彙休恤兇黑昕吃欠吸興僖詰 "

              
' 한자를 한글로 변환하기 위한 한글 테이블
                       '   0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1    */
Global Const hangul_tbl = "가각간갈감갑강개객갱갹거건걸검겁게격견결겸경계고곡곤골공곶과곽관" _
                        & "괄광괘괴굉교구국군굴궁권궐궤귀규균귤극근글금급긍기긴길김끽나낙난" _
                        & "날남납낭내냉녀년념녕노녹논농뇌뇨누눈눌뉴늑늠능니닉다단달담답당" _
                        & "대댁덕도독돈돌동두둔득등라락란랄람랍랑래랭략량려력련렬렴렵령례로" _
                        & "록론롱뢰료룡루류륙륜률륭륵름릉리린림립마막만말망매맥맹멱면멸명" _
                        & "몌모목몰몽묘무묵문물미민밀박반발방배백번벌범법벽변별병보복본볼봉" _
                        & "부북분불붕비빈빙사삭산살삼삽상새색생서석선설섬섭성세소속손솔송쇄" _
                        & "쇠수숙순술숭슬습승시식신실심십쌍씨아악안알암압앙애액앵야약양어억" _
                        & "언얼엄업엔여역연열염엽영예오옥온올옹와완왈왕왜외요욕용우욱운울웅" _
                        & "원월위유육윤율융은을음읍응의이익인일임입잉자작잔잠잡장재쟁저적전" _
                        & "절점접정제조족존졸종좌죄주죽준줄중즉즐즙증지직진질짐집징차착찬찰" _
                        & "참창채책처척천철첨첩청체초촉촌총촬최추축춘출충췌취측층치칙친칠침" _
                        & "칩칭쾌타탁탄탈탐탑탕태택탱터토통퇴투특틈파판팔패팽퍅편폄평폐포폭" _
                        & "표품풍피필핍하학한할함합항해핵행향허헌헐험혁현혈혐협형혜호혹혼홀" _
                        & "홍화확환활황회획횡효후훈훙훤훼휘휴휼흉흑흔흘흠흡흥희힐 "

Function BSearchHan(ByVal SearchStr As String, Optional StartIndex As Long = 1) As Integer

    Dim i As Long, j As Long, k As Long
    Dim cnt As Long
    Dim StrPrev As String
    Dim StrNext As String
    
    BSearchHan = 0
    i = StartIndex
    j = Len(hanmun_tbl) - 1
    
    Do
    
    '찾지 못하고 빠져나온다.
        If i > j Then Exit Do

        k = (i + j) / 2
    'StrComp이 -1이면, 가운데 항목이 찾은 것보다 작다.
    '따라서 앞 절반 부분에 있어야 한다.
    'StrComp가 1이면, 가운데 항목보다 더 큰 항목을 찾고 있는 것이다.
    '따라서 뒤 절반 부분에 있어야 한다.
        StrPrev = Mid(hanmun_tbl, k, 1)
        StrNext = Mid(hanmun_tbl, k + 1, 1)
        If StrPrev = SearchStr Then Exit Do
        If StrComp(StrPrev, SearchStr, vbTextCompare) 
= -1 And StrComp(StrNext, SearchStr, vbTextCompare) = 1 Then Exit Do Else Select Case StrComp(StrPrev, SearchStr, vbTextCompare) Case -1: i = k + 1 Case 1: j = k - 1 End Select End If 'Debug.Print StrPrev Loop BSearchHan = k End Function Public Function Hanmun2Hangul(ByVal Source As String) As String '한문을 한글로 바꾼다. Dim i As Integer Dim j As Integer Dim strtemp As String Dim in_len As Integer Dim Dest As String Dim bIndex As Long in_len = Len(Source) For i = 1 To in_len strtemp = Mid(Source, i, 1) If (Asc(strtemp) >= Asc("伽") And Asc(strtemp) <= Asc("詰")) Then ' 기존에 시퀀셜하게 타던 부분 ' "힐"자를 찾으려면 루프를 한참 돌아야 함. ' For j = 1 To Len(hanmun_tbl) ' If Asc(Mid(hanmun_tbl, j, 1)) > Asc(strtemp) Then ' Dest = Dest & Mid(hangul_tbl, j - 1, 1) ' Exit For ' End If ' ' Next j ' BSearch루틴을 탄다. bIndex = BSearchHan(strtemp) If bIndex > 0 Then Dest = Dest & Mid(hangul_tbl, bIndex, 1) End If Else Dest = Dest & strtemp End If Next i Hanmun_to_Hangul = Dest End Function
자료출처 : http://blog.naver.com/romu/60002440185