THIS IS ELLIE

URL 스트링에 한글이 포함될 때 해결방법 본문

낑낑/Troubleshooting

URL 스트링에 한글이 포함될 때 해결방법

Ellie Kim 2019. 11. 29. 17:02

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

반응형