서버의 인코딩 방식이 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¶m2=%s",
URLEncoder.encode(param1, charset),
URLEncoder.encode(param2, charset));
'프로그래밍(~2017) > 자바' 카테고리의 다른 글
[JAVA] byte to int, double, etc (혹은 그반대) 등 코드포함 (0) | 2016.07.01 |
---|---|
[자바] SimpleDateFormat 데이터형식 (0) | 2012.01.04 |
[자바] 현재 자바의 인코딩 방식 알아보는 방법 (0) | 2011.12.28 |
[JAVA] 이클립스에서 주석 이쁘게 달기 (자동완성기능 사용했을때 내용뜨기) (0) | 2011.12.05 |
[자바] MD5 만드는 함수 (0) | 2011.11.11 |