본문 바로가기
카테고리 없음

[Swift] URL Encoding(인코딩) addingPercentEncoding 역할

by 정석 지향 2023. 5. 10.
반응형

통신을 위해 주로 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가지 속성 외에도 다양한 속성이 있으니 상황에따라 잘 선택하여 사용하시면 됩니다.

반응형