위 화면에서 ko_KR 이 IE9, FF 등에서 기본 설정 되어있는 언어 옵션이다.
IE8은 ko 가 기본값으로 되어있다. (위 화면의 옵션은 IE9 화면이며 ko 는 테스트를 위해 추가한 부분이다, 위아래로 이동하여 우선권 설정이 가능하다.)
URLEncoder.encode("한글", encoding_charset) 로 인코딩 후 GET 주소를 보내면 서버에서 request 에 캐릭터 셋을 euc-kr 로 설정한후 request.getParameter 로 받을 경우ko 는 바로 제대로 된 한글이 보여지고 ko_KR 은 깨진 문자열로 보여진다.
따라서 request.getLocale() 을 이용해 ko 인지 ko_KR인지 판단하여 ko_KR일 경우 파라미터 값을 다시 getByte("ISO-8859-1"), "euc-kr" 로 인코딩 변경하여주면 정상적인 한글 값을 받아 올수 있다.
-- 사이트 페이지 링크
<a href="?name=<%=URLEncoder.encode("홍길동", "euc-kr")%>" >
-- 서버에서의 처리
String name = request.getParameter("name");
// [ko] 로 넘어온 경우 출력해 보면 "홍길동" 으로 찍힌다. 인코딩할 필요 없음.
// [ko_KR] 인 경우 깨져서 보인다. 인코딩이 필요하다.
if("get".equalsIgnoreCase(request.getMethod()) && !"".equals(name)){
String localeName = String.valueOf(request.getLocale()).trim();
if("ko_KR".equals(localeName)){
name = new String(name.getBytes("iso-8859-1"), "euc-kr");
// [ko_KR] 로 넘어온 경우 인코딩 후 여기서 "홍길동" 으로 찍힌다.
}
}