통신을 위해 주로 rest api를 사용하는데요, 이때, addingPercentEncoding
(withAllowedCharacters: .urlQueryAllowed)을 이용하여 url을 encoding 합니다.
URL 허용되는 문자는 알파벳,숫자,하이픈,닷 등의 제한된 문자입니다.
*그외 문자는 퍼센트 인코딩이 필요합니다
*브라우저에 한글이 입력되는 이유 -> 브라우저에서 인코딩 처리를 해주기 때문입니다.
그렇다면 addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed)의 역할은 무엇일까요?
먼저 ‘퍼센트 인코딩(Percent encoding)’은 인코딩 된 문자가 %로 시작하고 뒤에 16진수로 표현되어 퍼센트 인코딩이라 부릅니다.
인코딩 과정 없이 url에 한글이나 특수문자 등을 넣으면 nil이 반환됩니다.
따라서 url에 한글이 들어간다면 인코딩 과정을 거치면 %16진수 형식으로 변하여 URL에서 사용할 수 있는 문자로의 변환 과정이 필요합니다.
이때, Swift 제공하는 addingPercentEncodingd(퍼센트 인코딩)을 이용할 수 있습니다.
ex)
let url = "http://swift-it-world?q=한글"
인코딩
let encoded = url.addingPercentEncoding(withAllowedCharacters: .urlPathAllowed)
디코딩
let decoded = encoded.removingPercentEncoding
그렇다면 .urlQueryAllowed, .urlPathAllowed 등은 무엇일까요?
restful api 이용 시 쿼리를 이용하기 위해 ‘=,?’ 문자 등 들어가는데 이러한 문자는 인코딩이 되면 안 되지만, 별도의 설정해 주지 않으면 한글과 함께 인코딩 되어 버립니다.
withAllowedCharacters을 설정해 주면 해당하는 문자는 인코딩이 되지 않고 그대로 사용할 수 있게 됩니다.
.urlQueryAllowed:
-> ! $ & \ ( ) * + - . / : ; = ? @ _ ~
.urlPathAllowed:
-> ! $ & \ ( ) * + - . / : = @ _ ~
.urlQueryAllowed, .urlPathAllowed의 두차이는 ‘?’ 포함 차이가 있습니다
urlQueryAllowed: "https://test.co.kr?keyword=%EC"
urlPathAllowed: "https://test.co.kr%3Fkeyword=%EC”
urlPathAllowed로 설정 후 출력 시 ‘?’ 문자가 -> ‘%3F’로 인코딩되었습니다. 이렇게 되면 올바른 url이 아니게 됩니다.
위에서 소개된 2가지 속성 외에도 다양한 속성이 있으니 상황에따라 잘 선택하여 사용하시면 됩니다.