사실 소켓 Exception은 여러가지 이유로 발생합니다.
제 경우 get방식의 파라미터로 쿼리를 날리는 과정에서 파라미터의 한글 데이터를 UTF-8로 인코딩 처리하지 않아서 발생하였는데요.
너무나 당연한 것이었는데 어떤 서버에서는 그냥 한글로 넘겨도 에러가 발생하지 않고
어떤 서버에서는 에러가 발생해서.. 정확한 이유를 찾는데 시간이 조금 걸렸습니다.
해결방법은 파라미터값을 string변수에 담을 때 인코딩처리를 해서 담아주면 됩니다.
해당예제는 UTF-8로 처리하며 유니코드와 euc-kr도 같은 방법으로 가능합니다.
======================================================================================
서버의 인코딩 방식이 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를 이용하여 한글을 인코딩하기 바란다.
아래는 검색하다가 이거다 싶어서 퍼왔다. 저 자세한 내용은 출처에 있으니 참고하시길..
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));
출처: http://onecellboy.tistory.com/113 [신불사 - 신현호라 불리는 사나이]
'디버깅' 카테고리의 다른 글
[Spring] Illegal overloaded getter method with ambiguous type for property '컬럼명' (0) | 2018.04.02 |
---|---|
[Mobile, HTML] 모바일웹에서 input text클릭 시 확대 막아주기 (0) | 2018.04.01 |
[Java] .toString() 보다는 String.valueOf()를 사용하자.. (Null Point Exception) (1) | 2018.02.08 |
[TIP] Eclipse HTML5 템플릿 추가 (0) | 2017.12.28 |
[Eclipse] 이클립스 import시 단축키 세팅 & 작동하지 않을때 (1) | 2017.08.08 |