Spring MVC UTF-8 인코딩
현재 저는 Spring MVC를 시작하려고합니다. 시도하는 동안 인코딩 문제가 발생했습니다.
내 JSP 페이지에 UTF-8 문자를 표시하고 싶습니다. 그래서 내 ModelAndView에 UTF-8 문자가있는 문자열을 추가했습니다. 다음과 같이 보입니다.
@Controller
public class HomeController {
private static final Logger logger = LoggerFactory.getLogger(HomeController.class);
@RequestMapping(value="/", method=RequestMethod.GET)
public ModelAndView home() {
logger.info("Welcome home!");
return new ModelAndView("home", "utftest", "ölm");
}
}
JSP 페이지에서 다음과 같이 UTF-8 문자로 문자열을 표시하고 싶습니다.
<%@ page language="java" pageEncoding="UTF-8"%>
<%@ page contentType="text/html;charset=UTF-8" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ page session="false" %>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Home</title>
</head>
<body>
<h1>Hello world!</h1>
<p><c:out value="ö" /></p>
<p><c:out value="${utftest}"></c:out></p>
</body>
</html>
결과적으로 다음을 얻습니다.
Hello world!
ö
ölm
다음 코드 <c:out value="ö" />
는 인코딩 오류없이 표시되었습니다. 또한 Springsource Tool Suite에서 기본 인코딩을 UTF-8로 설정했지만 여전히 잘못된 문자가 표시됩니다.
편집하다:
OS X 10.6이 설치된 Mac을 사용하고 있다고 말 했어야했을 것입니다. Spring 개발의 경우 Spring (http://www.springsource.com/developer/sts)의 Springsource Tool Suite를 사용합니다. 이것이 내 설정에 무엇이 잘못되었는지 알아내는 데 도움이되기를 바랍니다.
편집 2 :
McDwell 덕분에 컨트롤러 "\u00f6lm"
대신 사용을 시도 "ölm"
했으며 JSP 페이지의 인코딩 문제가 사라졌습니다.
내 .java 파일이 잘못된 문자 집합으로 인코딩되었음을 의미합니까? Eclipse에서 이것을 어디에서 변경할 수 있습니까?
감사합니다.
확실히 당신은 봄의 등록 확인 CharacterEncodingFilter
당신에 web.xml
(즉, 파일의 첫 번째 필터해야합니다).
<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>
톰캣에있는 경우에 당신은을 설정하지 않았 URIEncoding
당신에 server.xml
. UTF-8로 설정하지 않으면 작동하지 않습니다. 확실히 CharacterEncodingFilter
. 그럼에도 불구하고 따라야 할 간결한 체크리스트 가 있습니다. 이 작업을 수행하도록 확실히 안내 할 것입니다.
좋아, 인코딩 문제의 이유를 찾았습니다.
내 빌드 프로세스에 결함이 있습니다. 내 pom.xml
파일 에서 Maven에게 UTF-8 인코딩으로 프로젝트를 빌드하도록 지시 하지 않았습니다 . 따라서 Maven은 MacRoman 인 내 시스템에서 기본 인코딩을 가져와 MacRoman 인코딩으로 빌드했습니다.
다행히 Maven은 프로젝트를 빌드 할 때 이에 대해 경고합니다 (그러나 다른 모든 메시지로 인해 경고가 화면에서 빠르게 사라질 가능성이 높습니다).
pom.xml
파일 에서 설정해야하는 속성은 다음과 같습니다 .
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
...
</properties>
모든 도움에 감사드립니다. 너희들없이 나는 이것을 알아낼 수 없을 것이다!
Benjamin의 답변 (필자가 훑어 본 것임) 외에도 파일이 실제로 적절한 인코딩 (소스 코드, JSP 등의 경우 UTF-8)을 사용하여 저장되었는지 확인해야합니다.하지만 Java 속성 파일 정의에 따라 ISO 8859-1로 인코딩되어야 함).
이것의 문제는 파일을 저장하는 데 어떤 인코딩이 사용되었는지 알 수 없다는 것입니다. 유일한 옵션은 특정 인코딩을 사용하여 파일을 열고 내용이 적절한 지 확인하는 것입니다. iconv를 사용하여 가정 된 인코딩에서 원하는 인코딩으로 파일을 변환 할 수도 있습니다. 오류가 발생하면 가정이 잘못된 것입니다. 따라서 hello.jsp가 UTF-8로 인코딩되었다고 가정하면 "iconv -f UTF-16 -t UTF-8 hello.jsp"를 실행하고 오류를 확인합니다.
파일이 제대로 인코딩되지 않았 음을 확인해야하는 경우 그 이유를 찾아야합니다. 파일을 만드는 데 사용한 편집기 또는 IDE 일 수 있습니다. Eclipse (및 STS)의 경우 텍스트 파일 인코딩 (기본 설정 / 일반 / 작업 공간)이 UTF-8로 설정되어 있는지 확인하십시오 (불행히도 시스템의 플랫폼 인코딩이 기본값입니다).
인코딩 문제를 디버깅하기가 너무 어렵게 만드는 이유는 관련된 구성 요소가 너무 많기 때문입니다 (텍스트 편집기, borwser 및 그 사이에있는 각각의 모든 소프트웨어 구성 요소, 경우에 따라 데이터베이스 포함). 각각에 오류가 발생할 가능성이 있습니다.
Benjamin의 답변 외에도 Spring Security 를 사용하는 경우 Web.xml에 CharacterEncodingFilter를 배치하면 항상 작동하지 않을 수 있습니다. 이 경우 사용자 지정 필터를 만들고 필터 체인에 첫 번째 필터로 추가해야합니다. 체인의 첫 번째 필터인지 확인하려면 addFilterBefore
WebSecurityConfigurerAdapter에서 사용하여 ChannelProcessingFilter 앞에 추가해야합니다 .
@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
//add your custom encoding filter as the first filter in the chain
http.addFilterBefore(new EncodingFilter(), ChannelProcessingFilter.class);
http.authorizeRequests()
.and()
// your code here ...
}
}
Spring Security의 모든 필터 순서는 여기에서 확인할 수 있습니다. HttpSecurityBuilder-addFilter ()
사용자 정의 UTF-8 인코딩 필터는 다음과 같습니다.
public class EncodingFilter extends GenericFilterBean {
@Override
public void doFilter(
ServletRequest request,
ServletResponse response,
FilterChain chain) throws IOException, ServletException {
request.setCharacterEncoding("UTF-8");
response.setCharacterEncoding("UTF-8");
chain.doFilter(request, response);
}
}
jsp 파일을 추가하는 것을 잊지 마십시오.
<%@ page pageEncoding="UTF-8" contentType="text/html; charset=UTF-8" %>
거기에 있다면 web.xml에서 CharacterEncodingFilter를 제거하십시오.
Spring MVC에서 문자열을 반환하는 UTF-8 인코딩을 강제하는 가장 쉬운 솔루션 :
에서는 다음 @RequestMapping
을 사용합니다.
produces = MediaType.APPLICATION_JSON_VALUE + "; charset=utf-8"
right-click to your controller.java then properties and check if your text file is encoded with utf-8, if not this is your mistake.
To solve this issue you need below three steps:
Set page encoding to UTF-8 like below:
<%@ page language="java" pageEncoding="UTF-8"%> <%@ page contentType="text/html;charset=UTF-8" %>
Set filter in web.xml file as below:
<filter> <filter-name>encodingFilter</filter-name> <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> <init-param> <param-name>forceEncoding</param-name> <param-value>true</param-value> </init-param> <init-param> <param-name>encoding</param-name> <param-value>UTF-8</param-value> </init-param> </filter> <filter-mapping> <filter-name>encodingFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
Set resource encoding to UTF-8, in case if you are writing any UTF-8 characters in Java code or JSP directly.
Depending on how you render your view, you may also need:
@Bean
public StringHttpMessageConverter stringHttpMessageConverter() {
return new StringHttpMessageConverter(Charset.forName("UTF-8"));
}
Worked for me like here Spring MVC Java config
by added to web initializer
@Override
protected Filter[] getServletFilters() {
CharacterEncodingFilter characterEncodingFilter = new CharacterEncodingFilter();
characterEncodingFilter.setEncoding("UTF-8");
return new Filter[] { characterEncodingFilter};
}
참고URL : https://stackoverflow.com/questions/5928046/spring-mvc-utf-8-encoding
'Nice programing' 카테고리의 다른 글
숫자를 단어로 변환 C # (0) | 2020.12.02 |
---|---|
동적 생성 옵션에서 옵션 "선택"속성 설정 (0) | 2020.12.02 |
AppEngine 오류 [java.lang.NoClassDefFoundError : org / w3c / dom / ElementTraversal] (0) | 2020.12.02 |
터치 장치 용 문서 .click 기능 (0) | 2020.12.02 |
http 전송을 위해 git과 함께 socks 프록시 사용 (0) | 2020.12.02 |