게시판 글 작성을 위한 코드 작성 중 한글을 입력하면 console 창에 Ẩḳɨòẃ 이런 언어로 표시가 되는 현상이 발생
(오류 사진이... 없다... 너무나 빡쳐서 캡쳐할 생각도 못했음)
처음에는 이유도 모르고 '콘솔 한글깨짐' 이렇게 검색해서 encoding 을 'MS949' 와 'UTF-8'로 바꾸는 행위를 하였지만
아무런 효과를 보지 못했다.
오류가 어디서 날 만한 곳을 하나하나 확인을 했다.
1. js에서 값을 제대로 가져오는지 console창에서 확인 → 문제 없이 한글 DB를 가져온다.
/* 글쓰기 버튼 클릭시 */
document.getElementById("write_btn").onclick = function() {
console.log(title.value);
console.log(content.value);
console.log(category.value);
// document.getElementById('write_form').submit();
}
∴ js 까지는 DB에서 한글 깨짐 현상이 없지만 Controller 에서 부터 발생한다는 것을 알게됨.
2. VO에 오류가 있어서 DB가 한글이 깨지는지 확인 → VO가 아닌 title 값 하나만 따로 요청 → 여전히 한글이 깨짐
/* 게시판 글쓰기 */
// VO 사용하지 않고 각각의 DB값으로 가져오기
@RequestMapping(value = "/notice/write", method = RequestMethod.POST)
public void notice_write(String title) {
System.out.println("제목 = " + title);
// ns.notice_write(nvo);
}
∴ VO 오류가 아닌 Controller에서 DB전송 요청시 오류 발생 한다고 생각.
☆ 해결
POST요청에서 서버 내부 인코딩이 안되었던 것이 였다.
POST요청의 경우 톰캣 내부에서 한글처리가 되지 않아서 한글을 인코딩해줄 수 있는 코드를 작성해 주어야 했다.
아래의 코드를 모든 JSP 파일에 작성 해 주어야 한다.
<% request.setCharacterEncoding("UTF-8"); %>
하지만 그러면 힘드니깐! 스프링에서 편하게 한번에 한글을 인코딩해주는 코드를 제공하고 있다.
web.xml에 해당 코드를 추가해 주면 된다.
<!-- POST요청에서 서버내부 인코딩 안되는 경우 추가 코드 -->
<filter>
<filter-name>encodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
<init-param>
<param-name>forceEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>encodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
아래 블로그 보고 문제를 해결하였다. 코드에 대해 자세히 적혀있으니 자세하게 궁금한 경우 가서 보는 것을 추천!
POST방식의 전송요청 일 때 UTF-8 한글 인코딩 설정 request.setCharacterEncoding("UTF-8") / web.xml
우리가 뷰페이지 텍스트박스에서 한글을 입력받으면 한글이 깨지는경우가 종종 있습니다. 한글이 깨지는 이유는 POST요청에서 Server내부 인코딩이 안된것입니다. POST요청같은 경우는 톰캣 내부
u-it.tistory.com
* 이건 내가 볼라고...
<!-- POST요청에서 서버내부 인코딩 안되는 경우 추가 코드 -->
<filter> // 웹 어플리케이션을 실행했을때 어디 특정위치에 적용할 필터
<filter-name>encodingFilter</filter-name> // 필터이름이 encodingFilter
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> // CharacterEncodingFilter라는 필터클래스(스프링에서 제공하는 필터)
<init-param> // 초기값
<param-name>encoding</param-name> // encoding이라는 이름으로
<param-value>UTF-8</param-value> // UTF-8을 설정
</init-param>
<init-param>
<param-name>forceEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>encodingFilter</filter-name> // 위에 지정한 encodingFilter를
<url-pattern>/*</url-pattern> // 모든 url패턴에 지정하겠다
</filter-mapping>