한글 출력 기본 원칙
인코딩과 디코딩할 때 chatset 을 맞춰서 해야함
- 보통 jsp파일에 바로 한글 쓰는 것은 문제되지 않음
- 디렉티브 태그 setContentType과 pageEncoding에서 인코딩과 디코딩을 처리해줌
- 그러나 url로 넘기거나 request로 다른 jsp파일로 값을 넘기는 경우에는 다름
- 인코딩과 디코딩을 직접 지정해줘야함
Base64
java.util.Base64
response.sendRedirect("main.jsp?name="+Base64.getEncoder().encodeToString("홍길동".getBytes()));
// http://localhost:8080/jspwork/ch05_1/main.jsp?name=yKux5rW/
// main.jsp
<% String s_name = request.getParameter("name"); %>
<%= s_name %> 님 안녕하세요! // yKux5rW
<br>
<%= Base64.getDecoder().decode(s_name) %> 님 안녕하세요! //[B@7b1b59ba
<br>
<%= new String(Base64.getDecoder().decode(s_name), "euc-kr") %> 님 안녕하세요! // 홍길동
- html에서 url로 값 넘기기 전에 Base64 인코더를 이용함
- 스트링 기본 바이트 배열을 변수에 넣음
- 인코딩 된 값을 url로 넘김
- 출력페이지에서 Base64디코더로 바이트 배열 받음
- String 생성자를 이용해 바이트배열을 euc-kr로 디코딩
URLEncoding
java.net.URLEncoder
response.sendRedirect("main.jsp?name="+ URLEncoder.encode("홍길동", "euc-kr"));
<% String s_name = request.getParameter("name"); %>
<%= s_name %> 님 안녕하세요! // ??±æ?¿
<br>
<%= s_name.getBytes("8859_1") %> 님 안녕하세요! // [B@2dff8011
<br>
<%= new String(s_name.getBytes("8859_1"), "euc-kr") %> 님 안녕하세요! // 홍길동
- html에서 url로 값 넘기기 전에 URL인코더를 이용함
- euc-kr로 인코딩
- 출력페이지에서 8859_1로 바이트배열 받음
- 바이트 배열 euc-kr로 디코딩
- 왜 중간에 8859_1로 바이트 배열을 받는가?
- getParameter로 인코딩 값을 받는 도중에 프로그램에서 값을 바꿈
- 인코딩한 값을 톰캣이 자동으로 8859_1로 디코딩함
- 그래서 디코딩돼서 깨진 값을 8859_1 바이트 배열로 원상복귀하고
- 그걸 다시 euc-kr로 디코딩하는 것
<% String s_name = request.getParameter("name"); %>
<%= s_name %> 님 안녕하세요! // ??±æ?¿
<br>
<%= URLDecoder.decode("%C8%AB%B1%E6%B5%BF", "8859_1") %> 님 안녕하세요! // ??±æ?¿
<br>
<%= new String(s_name.getBytes("8859_1"), "euc-kr") %> 님 안녕하세요! // 홍길동
<br>
<%= URLDecoder.decode("%C8%AB%B1%E6%B5%BF") %> 님 안녕하세요! // 홍길동
setCharacterEncoding
response.sendRedirect("main.jsp?name="+"홍길동");
<% request.setCharacterEncoding("euc-kr"); %>
<% String s_name = request.getParameter("name");%>
<%= s_name %> 님 안녕하세요!
- request 인코딩 방식을 직접 지정(제일 간단한 방법)
- 출력 페이지에서 request를 받을 때 euc-kr로 인코딩하는 것
- 페이지에 로드될 때 페이지 디코딩 또한 euc-kr이므로 잘 출력 됨
- 다만 여기서는 request 내부적으로 값을 넘겨주는 것이 아닌
- url 쿼리스트링에 강제로 넣었기 때문에 한글은 빈값으로 넘어와서 쓸 수 없음
'Backend > Java' 카테고리의 다른 글
Repository와 DAO 차이? (0) | 2021.01.14 |
---|---|
[Spring Boot] 유효성 검사 (0) | 2020.12.16 |
[JSP] 쿼리문 실행 오류 (0) | 2020.07.09 |
[안드로이드] 키보드 리스너 정의 (0) | 2020.05.20 |
[안드로이드/자바] 익명 내부 클래스 변수 범위(final) (0) | 2020.05.19 |