🎈http 통신에서 기본적으로 일부 한글과 특수문자, 공백 등의 문자들을 그대로 http프로토콜에 포함될 수 없고 별도의 인코딩을 해서 보내야한다.
서버마다 인코딩,디코딩 설정이 다를 수 있다.
결국 시작은 인코딩인데 POST 방식 통신에서는 Request Content-Type 헤더에 charset 키로 문자셋을 포함하고 서버에서는 이를 토대로 디코딩을 진행한다. 하지만 GET 방식에는 기본적으로 Content-Type도 Request에 포함되지 않기 때문에 인코딩한 문자셋을 전달할 방법이 없고 이를 위해 서버에서는 GET방식 데이터의 디코딩을 위한 문자셋을 미리 지정해놔야 한다.
한글을 포함하고⭐GET방식⭐ Parameter 로 전달받아 다이나믹하게 나타내기 위해서는 서버에서 위와 같이 new String, getByte 설정을 추가로 해줘야 한다.
이 경우 코드에서 new String, getBytes 를 이용해서 아래와 같이 처리할 수 있다.
String name = new String(request.getParameter("name").getBytes("ISO-8859-1"), "UTF-8");
이는 ISO-8859-1 로 디코딩 되어 있는 문자열을 다시 ISO-8859-1 로 인코딩해서 원상태(UTF-8 인코딩)로 되돌린뒤 뒤에 다시 UTF-8로 디코딩 하라는 말이다.
즉 , 매개변수로 받은 charset으로 문자열을 byte로 인코딩하여 byte배열에 넣어서 반환해준다는 뜻이다.
즉 new String(byte[],charsetName) byte[]을 매개변수로 받은 charsetName으로 지정한charset으로 디코딩한다.
UTF-8은 유니코드의 모든 문자를 표현하는 데 사용되는 가변 길이 문자 인코딩 방식이며,
ISO-8859-1은 라틴 알파벳을 포함한 일부 문자를 지원하는 고정 길이 문자 인코딩 방식이다.
UTF-8은 대부분의 다국어 환경에서 선호되는 인코딩 방식이다.