Swift

Swift ) URL에 한글이 들어갈때? (addingPercentEncoding)

JoonSwift 2022. 3. 29. 00:03

URL에 한글이 들어가면?

let stringURL = "https://joonswift.com/user/준스"
print(URL(string: stringURL)) // nil

String 타입의 stringURL에 제일 마지막 부분에 "준스" 라는 한글이 있습니다. 이 String을 URL로 변환하면, nil을 리턴하게 됩니다.

Percent Encoding & URI

우선 PercentEncoding에 앞서 URI(Uniform Resource Identifier)에 대해서 알아보겠습니다. 

A Uniform Resource Identifier(URI) is a unique sequence of characters that identifies a logical or physical resource used by web technologies.

웹 기술에서 사용되는 논리적, 물리적인 자원을 식별할 수 있는 식별자를 일련의 문자들로 나타낸 것입니다. 이 URI를 활용하여 어떤 네트워크상의 자원의 위치를 제공할 수 있는데 이를 URL이라고 합니다. 

이 URI를 표현하는데 표현하는 문자를 US-ASCII로 제한하여 표현하고 있는데, 이때 사용하는 Encode 방법 중에 Percent Encoding( URL Encoding)이 있습니다. 

한글은 US-ASCII로 표현할 수 없기 때문에 URL로 그냥 변환시켜 버리면 알 수 없는 문자들이 들어가서 nil을 반환하게 되는 것입니다. 그래서 인코딩을 진행해 주어야 합니다. 

이때 Swift에서 사용하는 메서드가 addingPercentEncoding(withAllowedCharacters:) 입니다.

Encoding 한글

addingPercentEncoding(withAllowedCharacters:) 는

Returns a new string created by replacing all characters in the string not in the specified set with percent encoded characters.

어떤 특정 집합에 있지 않은 문자들을 골라 Percent encoded 문자들로 바꿔주는 메서드입니다. 여기서 .urlQueryAllowed 를 사용하여 인코딩 해주겠습니다.

let stringURL = "https://joonswift.com/user/준스"
let encodedString = stringURL.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed)
print(encodedString) //"https://joonswift.com/user/%EC%A4%80%EC%8A%A4"
print(URL(string: encodedString!)) // https://joonswift.com/user/%EC%A4%80%EC%8A%A4

"준스"라고 적힌 한글 부분이 퍼센트가 가득한 문자들로 인코딩 된 모습을 확인할 수 있고, 이제 URL로 변환하여도 nil이 나오지 않습니다. 

 

참고 문헌

https://en.wikipedia.org/wiki/Percent-encoding

 

Percent-encoding - Wikipedia

From Wikipedia, the free encyclopedia Jump to navigation Jump to search Method of encoding characters in a URI Percent-encoding, also known as URL encoding, is a method to encode arbitrary data in a Uniform Resource Identifier (URI) using only the limited

en.wikipedia.org

https://en.wikipedia.org/wiki/Uniform_Resource_Identifier

 

Uniform Resource Identifier - Wikipedia

From Wikipedia, the free encyclopedia Jump to navigation Jump to search String used to identify a name of a web resource Not to be confused with URL. A Uniform Resource Identifier (URI) is a unique sequence of characters that identifies a logical or physic

en.wikipedia.org

 

'Swift' 카테고리의 다른 글

Swift ) Difference between components and split  (0) 2022.04.19
Swift ) What is AnyObject?  (0) 2022.04.06
Type Methods (static func & class func)  (0) 2022.03.23
Sequence  (0) 2022.01.28
Unowned?  (0) 2021.02.28