프로그래밍(~2017)/자바

[자바] URL , HttpURLConnection 에서 파라미터(parameter) 인코딩(utf-8) 관련

단세포소년 2011. 12. 28. 21:58
반응형

서버의 인코딩 방식이 utf-8 이라면 클라이언트도 utf-8로 보내야한다.

그래야 서버가 디코딩하고 또다시 utf-8로 인코딩하는 번거로움도 없어지고 서로의 규약을 맞출수 있다.

예)
URL url = new URL("http://www.test.com/login.jsp?id=홍길동&pass=지리산 호랑이");

예문과 같이 하게되면 홍길동과 지리산 호랑이가 한글이고 이것의 인코딩 방식이 자바의 인코딩 방식을 따르기 때문에 서버에서는 이상한 문자로 받아들일수가 있다.

이 경우
String id=URLEncoder.encode("홍길동", "UTF-8");
String pass=URLEncoder.encode("지리산 호랑이", "UTF-8");
URL url = new URL("http://www.test.com/login.jsp?id="+id+"&pass="+pass);

이런식으로 한글을 인코딩하여 url 에 써주어야한다.
위의 GET 방식뿐만 아니라 POST 방식도 마찬가지다

필자의 경우는 서버와 클라이언트 둘다 UTF-8 로 문자 인코딩 방식을 맞추었다.
개발자에 따라 자신이 원하는 인코딩 방식을 정하고 그에 맞게 URLEncoder를 이용하여 한글을 인코딩하기 바란다.


여담이지만
"없습니다.".getBytes("UTF-8") 과 URLEncoder.encode("없습니다", "UTF-8") 의 비교를 하겠다.

"없습니다.".getBytes("UTF-8") 이경우 바이트 배열을 반환하고 이를 출력해보면 
ec9786ec8ab5eb8b88eb8ba42e

URLEncoder.encode("없습니다", "UTF-8")  이 경우 문자열을 반환하고 이를 출력해보면
%EC%97%86%EC%8A%B5%EB%8B%88%EB%8B%A4

"없습니다.".getBytes("UTF-8") 는 "없습니다" 라는 문자를 utf-8로 바이트단위로 인코딩하는 것이라면
URLEncoder.encode("없습니다", "UTF-8")  는 인코딩한 값을 문자로써 보여준다.

"없습니다.".getBytes("UTF-8") 해서 나온 바이트배열을 한 바이트단위로 %를 붙여 문자열화 시킨것이
URLEncoder.encode("없습니다", "UTF-8") 이다.



ps . 글을 발로 썼나... 글공부좀 해야지
이해하신 분들은 용자...


아래는 검색하다가 이거다 싶어서 퍼왔다.  저 자세한 내용은 출처에 있으니 참고하시길..

String url = "http://example.com";
String charset = "UTF-8";
String param1 = "value1";
String param2 = "value2";
// ...
String query = String.format("param1=%s&param2=%s",
     
URLEncoder.encode(param1, charset),
     
URLEncoder.encode(param2, charset));


출처 : http://stackoverflow.com/questions/2793150/how-to-use-java-net-urlconnection-to-fire-and-handle-http-requests





반응형