본문 바로가기
Mobile Programming/IOS(Swift)

[iOS] UTF-8 -> Unicode 변환하기

by 푸고배 2020. 4. 21.

개발 중인 iOS에 UTF-8 타입의 데이터를 받아오는 과정에서 데이터가 깨지는 문제가 발생해서 Unicode로 변환하는 과정이 필요했다. 영문, 숫자, 기호와 같은 문자는 문제 없이 잘 받아오지만, 한글, 일본어 같은 3byte UTF-8에서 데이터를 2byte 씩 불러와 인코딩이 깨지는 문제가 발생했다. 그래서 직접 디코더 구현을 위해 UTF-8 type과 Unicode type을 공부하던 중, 아래와 같은 자료를 발견했다.

그림과 같은 알고리즘을 이용해 비트 연산한 코드는 아래와 같다.

func utf8ToUnicode(utf8Code:Array<UInt16>)->String{
    var returnStr=""
    var i=0
    while i<utf8Code.count {
        if Int(utf8Code[i])<127{
            returnStr=returnStr+String(UnicodeScalar(utf8Code[i])!)
            i=i+1
        }else if Int(utf8Code[i])<224{
            var first = Int(utf8Code[i])
            var second = Int(utf8Code[i+1])
            let str = ((first&28)>>3)<<8+(first&3)<<6+(second&63)
            returnStr=returnStr+String(UnicodeScalar(str)!)
            i=i+2
        }else if Int(utf8Code[i])<240{
            var first = Int(utf8Code[i])
            var second = Int(utf8Code[i+1])
            var third = Int(utf8Code[i+2])
            let tmp = (first&15)<<4+(second&60)>>2
            let str = (second&3)<<6+(third&63)+tmp<<8
            returnStr=returnStr+String(UnicodeScalar(str)!)
            i=i+3
        }else{
            i=i+1
        }
    }
    return returnStr
}

 

 

인코딩 문제 해결!ㅜㅜ


 

참고 자료 :

https://hahaite.tistory.com/282

 

반응형

댓글