logo

English

이곳의 프로그래밍관련 정보와 소스는 마음대로 활용하셔도 좋습니다. 다만 쓰시기 전에 통보 정도는 해주시는 것이 예의 일것 같습니다. 질문이나 오류 수정은 siseong@gmail.com 으로 주세요. 감사합니다.

iOS - Objective - C, URL 인코딩과 디코딩

by digipine posted Nov 01, 2017
?

Shortcut

PrevPrev Article

NextNext Article

Larger Font Smaller Font Up Down Go comment Print
?

Shortcut

PrevPrev Article

NextNext Article

Larger Font Smaller Font Up Down Go comment Print

URL 인코딩과 디코딩 

웹과 어플을 연동을 하다 보면 한글과 특수문자 등으로 인해서 UTF-8 로 인코딩 해서 데이터를 넘겨야 하는 경우가 많이 있습니다.

NSString *urlString = [NSString stringWithFormat:@"http://www.naver.com/loginService?method=joinMember&userid=%@&passwd=%@&confirm_passwd=%@&nickname=%@",email_tf.text,password_tf0.text,password_tf1.text,nickName_tf.text];


NSString *escapedUrl = [urlString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];

NSMutableURLRequest *request = [[[NSMutableURLRequest alloc] init] autorelease];

[request setURL:[NSURL URLWithString:escapedUrl]];

[request setHTTPMethod:@"GET"];

NSURLConnection *joinConnection = [NSURLConnection connectionWithRequest:request delegate:self];

 

위 코드를 보면 네이버에 회원가입을 한다고 가정을 하고서 이메일과 패스워드, 패스워드 확인, 닉네임을 웹에 전달을 하는 문자열 입니다.

그렇데 닉네임이 한글일 수 있니 문자열을 UTF8 로 변환해서 전송 합니다.


NSString *escapedUrl = [urlString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];

바로 위 코드가 UTF8 로 변환을 하는 것인데요.

문제는 바로 인코딩이 아니고 디코딩인 것입니다.

 

보통 웹에서 데이터를 받을 때 xml 데이터로 받던가 웹페이지 결과값으로 받아서 처리를 하게 되는데

웹뷰를 사용해서 어플을 만들게 되면 기존 서비스를 그대로 쓰는 경우가 많습니다.

예를 들어

 

http://www.naver.com/loginService?nickname=절대천황

 
이렇게 파라미터 값으로 데이터를 주는 경우가 있는데

요개 Objective-C 에서 골치 거리가 되는 것이죠.

 

웹상에서는 이걸 보통 바로 전달을 안 하고 UTF8 로 인코딩 해서 전달을 하게 되는데

Objective-C 상에서는 전혀 알 수 없는 URL 로 표시 됩니다.

http://www.naver.com/loginService?nickname=%EC%A0%88%EB%8C%80%EC%B2%9C%ED%99%A9


이렇게 글자가 나오게 됩니다.

그럼 위의 값을 바로 전달을 받으면 상관이 없는데 Objective-C 는 파라미터 값을 받을 수 없기 때문에

URL 주소를 스트링으로 받아와서 그 주소를 짤라서 데이터 값을 처리 해야 하는데

저 스트링을 한글로 변환 시킬 디코딩 방법을 찾는게 쉽지 않더군요.


그런데

NSString *escapeStr = [urlPath stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding];

이렇게 urlPath 스트링으로 받아서 처리하니 디코딩이 되더군요.