개발 중인 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
}
반응형
'Mobile Programming > IOS(Swift)' 카테고리의 다른 글
[iOS] App Error : Failed with exit code 1 (2) | 2020.05.27 |
---|---|
[iOS]UIView Mask를 이용해 view 일부만 표시하기 (0) | 2020.05.08 |
[iOS] App HTTP 접근 허용하기 (0) | 2020.04.02 |
[iOS] 기본 카메라 바코드 인식 기능 사용하기 (0) | 2020.04.02 |
[ios] 공공데이터를 이용하여 버스 어플리케이션 만들기1 - xml (0) | 2019.07.08 |
댓글