적당한 고통은 희열이다

- 댄 브라운 '다빈치 코드' 중에서

초보 iOS 개발자의 일상/개발 업무

[Swift iOS] Section Index Title 한글 초성 가져오기 UnicodeScalar

hongssup_ 2021. 5. 31. 17:54
반응형

유니코드에서 한글 분리

유니코드에서 한글은 0xAC00에서 0xD7A3 사이의 코드 값을 갖는다. 각 16진수 값은 10진수로 표시하면 44032와 55203으로 총 11,172개. 유니코드 내 한글은 초/중/종성의 조합으로 표현되며, 초성 19개, 중성 21개, 종성 28개를 조합하여 하나의 글자가 된다. 

 

초성 = ((문자코드 - 0xAC00) / 28) / 21

중성 = ((문자코드 - 0xAC00) / 28 % 21

종성 = (문자코드 - 0xAC00) % 28

 

초성 구하는 코드 예시

let hangul = ["ㄱ","ㄲ","ㄴ","ㄷ","ㄸ","ㄹ","ㅁ","ㅂ","ㅃ","ㅅ","ㅆ","ㅇ","ㅈ","ㅉ","ㅊ","ㅋ","ㅌ","ㅍ","ㅎ"]

func chosungCheck(word: String) -> String {
    let octal = word.unicodeScalars[word.unicodeScalars.startIndex].value
    let index = (octal - 0xac00) / 28 / 21
    return hangul[Int(index)]
}

chosungCheck(word: "바다")	// "ㅂ"
chosungCheck(word: "하늘")	// "ㅎ"
let hangul = ["ㄱ","ㄲ","ㄴ","ㄷ","ㄸ","ㄹ","ㅁ","ㅂ","ㅃ","ㅅ","ㅆ","ㅇ","ㅈ","ㅉ","ㅊ","ㅋ","ㅌ","ㅍ","ㅎ"]
let word = "하늘"
let octal = word.unicodeScalars[word.unicodeScalars.startIndex].value		// 54616
let unicode = String(format: "0x%x", b)			// "0xd558"
let index = (octal - 0xac00) / 28 / 21			// 18
hangul[Int(x)]			// "ㅎ"

 

 

참고 : sooopd_UnicodeScalar, minsone 한글풀어쓰기, Section Index Title

728x90
반응형