URL 스트링에 한글이 포함될 때 해결방법
URL 스트링에 한글이나 공백 때문에 인식이 안되서 URL(string: )을 하면 nil이 되는 경우가 있다.
이 경우에는 한글을 인코딩해주어 URL을 보내야한다.
스위프트에서 NSString의 인스턴스 메서드인 addingPercentEncoding(withAllowedCharacters:)를 사용할 수 있다.
이 메서드가 하는 일은 지정된 세트에 없는 모든 문자를 퍼센트로 인코딩 된 문자로 바꾸어 새로운 문자열을 반환해주는 함수이다.
퍼센트 인코딩이란 URL 관련해 특정 의미 있는 문자를 인코딩하는 메커니즘이며, URL 인코딩이라고도 한다.
% 뒤에 대체 문자의 ASCII 값을 16진수로 표시한다.
파라미터인 allowedCharacters로 사전 정의된 세트 중 하나를 지정해서 전달한다.
여기서 말하는 세트란 NSCharacterSet를 말하며 유니코드 호환 문자 집합을 나타낸다.
여기서 원하는 세트를 지정한 후 인코딩이 성공하면 문자열을 리턴하고 변환 불가한 경우 nil을 리턴한다.
나는 이미지 url에 한글이 포함되어 있었기 때문에 URL화 하는 과정에서 nil이 발생했다.
한글을 인코딩해주는 작업이 필요했기 때문에 addingPercentEncoding(withAllowedCharacters:)를 사용해서 해결할 수 있었다.
guard let encoding = cosmetic.image.addingPercentEncoding(withAllowedCharacters: .urlFragmentAllowed), let image = URL(string: encoding) else {
return
}
주의할 점
퍼센트 인코딩 된 문자열에서 이 메서드를 호출하면 안 된다.
퍼센트 인코딩 된 문자가 두 번 퍼센트 인코딩 되기 때문이다.
resources :
https://developer.apple.com/documentation/foundation/nsstring/1411946-addingpercentencoding
https://developer.apple.com/documentation/foundation/nscharacterset