본문 바로가기

Android

안드로이드 httpURLConnection 한글 전송

URLEncoder.encode() , 온갖 utf-8 떡칠로도 해결되지 않던 안드로이드-서버 한글전송이 아래 글대로 하여 성공했다.



출처: http://sdw8001.tistory.com/entry/Android-Http를-이용한-Post방식-데이터-전송 




안드로이드에서 HTTP를 통한 데이타를 가져오는 방식은,
URL클래스 또는 HttpClient를 사용하는 방법이 있다.

1. URL 클래스 사용


 GET 방식으로 간편히 사용할수 있지만, POST방식은 파라미터를 전달하는 방식이 다르므로 
이 대로는 파라미터를 전달할수 없다.

2. HTTPClient 사용 
잘못된 예1


HttpPost에 URL과 전달할 파라미터들을 헤더에 추가하여 결과를 얻는다.
HttPost 에 정보 담기
-> HttpClient에서 요청을 실행 HttpResponse로 결과 리턴
-> HttpResponse의 getEntity로 inputstream을 얻어서 결과 얻기

결과를 얻어왔지만, 
ㄱ. 파라미터가 제대로 넘어가지 않는 문제와 
ㄴ. 한글을 인코딩에서 문제 발생

잘못된 예2


HttpParams 를 사용하여 파라미터를 전달하려함 (후에 안것이지만 HttpParams는 이런 용도가 아니라고 함)

그래서 사용한 방법은
NameValuePair 목록을 가지는 List를 활용하는 방법로 파라미터명 - 값을 List<NameValuePair>로 모아
HttpPost요청에 setEntity(new UrlEncodedFormEntity()) 한다.

결과를 얻어왔지만, 
ㄱ. 파라미터가 제대로 넘어가지 않는 문제와 
ㄴ. 한글을 인코딩에서 문제 발생

3. 성공한 예


HttpURLConnection을 사용.
PrintWriter를 통해 데이타를 보내고, HttpURLConnection을 통해 InputStream을 얻어 결과를 만든다. -> 파라미터 전송 성공

한글문제는 보내거나 받을때, 모두 최초의 스트림을 만들때 인코딩 문자열을 넘길수 있는 생성자를 통해 한글 인코딩을 전달하여 생성하니 한글도 정상적으로 동작.