- Eclipse
Text file encoding은 UTF-8로, 파일마다 확인.
- MySQL
- JSP
1
2
3
|
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
|
- Tomcat
server.xml (GET 방식으로 넘길 때 유효하다고 합니다. 추가된 속성은 다음과 같습니다.)
URIEncoding="UTF-8"
useBodyEncodingForURI="true"
URIEncoding="UTF-8"
1
2
3
4
|
<Connector connectionTimeout="20000" port="8080" protocol="HTTP/1.1"
redirectPort="8443" URIEncoding="UTF-8" useBodyEncodingForURI="true" />
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" URIEncoding="UTF-8" />
|
1
2
3
4
5
|
<Connector connectionTimeout="20000" port="8080" protocol="HTTP/1.1"
redirectPort="8443" URIEncoding="UTF-8" useBodyEncodingForURI="true" />
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" URIEncoding="UTF-8" />
|
project의 web.xml (filter 등록)
파일마다
1
2
|
request.setCharacterEncoding("UTF-8");
response.setCharacterEncoding("UTF-8");
|
대신
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
|
package filters;
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
public class SetCharacterEncodingFilter implements Filter {
protected String encoding = null;
protected FilterConfig filterconfig = null;
protected boolean ignore = true;
@Override
public void destroy() {
// TODO Auto-generated method stub
this.encoding = null;
this.filterconfig = null;
}
@Override
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
// TODO Auto-generated method stub
// Conditionally select and set the character encoding to be used
if (ignore || (request.getCharacterEncoding() == null)) {
String encoding = selectEncoding(request);
if (encoding != null)
request.setCharacterEncoding(encoding);
}
chain.doFilter(request, response);
}
@Override
public void init(FilterConfig filterconfig) throws ServletException {
// TODO Auto-generated method stub
this.filterconfig = filterconfig;
this.encoding = filterconfig.getInitParameter("encoding");
String value = filterconfig.getInitParameter("ignore");
if (value == null)
this.ignore = true;
else if (value.equalsIgnoreCase("true"))
this.ignore = true;
else if (value.equalsIgnoreCase("yes"))
this.ignore = true;
else
this.ignore = false;
}
protected String selectEncoding(ServletRequest request) {
return (this.encoding);
}
}
|
작성 후, project의 web.xml에 등록.
1
2
3
4
5
6
7
8
9
10
11
12
13
|
<filter>
<filter-name>Set Character Encoding</filter-name>
<filter-class>filters.SetCharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>Set Character Encoding</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
|
- 위 내용을 모두 확인, 적용해도 안되고, 혹시 MultipartRequest를 사용하신다면 생성자 encoding 매개변수에 “UTF-8” 넣어 주세요! (저는 이것 때문에 ㅠㅠ)
1 |
MultipartRequest mRequest = new MultipartRequest(request, folderPath, maxByteSize, "UTF-8");
|
대부분의 검색 결과는 방법만 나와 있습니다. 왜 그런지, 위 내용 중 어떤 부분이 설정 되지 않았을 때 어떤 결과를 보여주는지 알기가 힘듭니다. 필터링 부분을 빼 보았는데 한글이 깨졌습니다. 그에 따른 페이지 에러도 발생합니다. 하지만 DB에는 정상적으로 한글이 저장되었습니다.MultipartRequest encoding 설정이 안 된 경우에는, 페이지 에러는 발생되지 않지만, 한글이 깨진 상태로 DB에 저장되었습니다. 시간을 내어 각 경우에 대해 연구를 해야 내공이 강해지겠지요? 일단 위 모든 내용을 적용, 확인하면 될 듯 합니다.
댓글 없음:
댓글 쓰기