[JSP/Eclipse] 한글이 물음표로 나와요;;

새싹감자·2023년 5월 31일
0

1# 상황 : 왜그러시는데요

 

 
교재를 보며 손가락 운동을 하는데 실행해보니 한글이 깨져서 나왔다.
실행파일에선 안 깨지는데 <form> 태그로 연결한 process 파일에서만 깨졌다.

 
include01.jsp

<%@ page contentType="text/html; charset=utf-8" %>
<html>
<head>
<title>Database SQL</title>
</head>
<body>
	<form method="post" action="insert01_process.jsp">
		<p>아이디 : <input type="text" name="id">
		<p>비밀번호 : <input type="text" name="passwd">
		<p>이름 : <input type="text" name="name">
		<p><input type="submit" value="전송">
	</form>
</body>
</html>

include_process.jsp

<%@ page contentType="text/html charset=utf-8" %>
<%@ page import="java.sql.*" %>
<html>
<head>
<title>Database SQL</title>
</head>
<body>
	<%@ include file="dbconn.jsp" %>
	<%
		request.setCharacterEncoding("utf-8");
	
		String id = request.getParameter("id");
		String passwd = request.getParameter("passwd");
		String name = request.getParameter("name");
		
		Statement stmt = null;
		
		try{
			String sql = "INSERT INTO member(id, passwd, name) VALUES('" +
			id + "','" + passwd + "','" + name + "')";
			stmt = conn.createStatement();
			stmt.executeUpdate(sql);
			out.println("member 테이블 삽입 성공!");
		}catch (SQLException ex) {
			out.println("member 테이블 삽입 실패...<br>");
			out.println("SQLException: " + ex.getMessage());
		}finally {
			if (stmt != null)
				stmt.close();
			if (conn != null)
				conn.close();
		}
	%>
</body>
</html>

 
' 한글깨짐이야 뭐 자주 있는 일이니까'

 
그러려니 했다. 그냥 아는대로 해결하면 되겠지..

 
보통은

  1. Window -> preferences -> General -> Content Types
  2. 해당 파일 우클릭 -> Properties -> type filter text

에서 인코딩을 UTF-8 로 맞추면 된다.

 
이전까지의 깨짐은 이렇게만 해도 해결이 되었다.

하지만 이번에는 물음표로만 깨질 뿐더러 전혀 해결되지 않았다.

 

2# 해결방법 : ㄴㅇㄱ

 
여러가지 방법을 서치한 결과, 유일하게 해결이 되는 방법을 찾았다.

지금까지 늘 써오던 이 문장..

<%@ page contentType="text/html; charset=utf-8" %>

 
여기서 charset=utf-8 대신 pageEncoding="utf-8" 을 사용해서

<%@ page contentType="text/html" pageEncoding="UTF-8" %>

실행하면 놀랍게도 나온다.


(실패 오류는 일부러 한거니까 무시하자)

 

3# 원인

 
내가 찾은 해결방법 글과 더불어 chatGPT를 굴려서 원인을 분석해본 결과,

포인트는 > 중복된 인코딩 설정 < 과 인 것 같다.

이미 charset=utf-8pageEncoding="utf-8"이 중복으로 있어서 충돌이 발생한다는 것 같다.

 
그렇다면 왜 charset=utf-8 만 넣었을 때 안되냐 하면..

사실 정확하진 않지만 나름 분석해본 결과

charset=utf-8 은 웹 브라우저에게 서버에서 보내는 데이터의 인코딩 방식이 UTF-8임을 알려주는데 반해,

pageEncoding="utf-8"은 특정한 JSP 파일 내의 모든 텍스트의 인코딩을 지정하여 해당 JSP 파일 내에서만 적용되기 때문에

 
인코딩 방식을 명시적으로 설정하는 pageEncoding="utf-8" 가 더 안전하다.

라는게 내 결론이다.

 
코드의 세계는 끝이 없는 것 같다...

 

 
참고 - 한글 깨짐 도와주세요(???? 이렇게 나옴)

profile
야망 있는 개발자(가 되어가는 중)

0개의 댓글