2010-06-02 4 views
13

사용자를 생성하는 데모 웹 애플리케이션이 있습니다. 다른 언어 (예 : 프랑스어)로 데이터를 삽입하려고하면 문자가 올바르게 인코딩되지 않습니다.Spring MVC를 사용한 인코딩 문제

@SuppressWarnings("unchecked") 
    @RequestMapping(value = "/user/create.htm", params={"id"}, method = RequestMethod.GET) 
    public String edit(@RequestParam("id") Long id, ModelMap model) { 
     System.out.println("id is " + id); 
     User user = userService.get(id); 

     model.put("user", user); 
     return "user/create"; 
    } 

    @RequestMapping(value = "/user/create.htm", method = RequestMethod.POST) 
    public String save(@ModelAttribute("user") User user, BindingResult result) { 

     System.out.println(user.getFirstName()); 
     System.out.println(user.getLastName()); 


     validator.validate(user, result); 
     if(result.hasErrors()) { 
      return "user/create"; 
     } 

     userService.save(user); 
     return "redirect:list.htm"; 
    } 

내 web.xml 파일은 다음과 같습니다 : 컨트롤러의 코드는

... 

    <filter> 
     <filter-name>encoding-filter</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>encoding-filter</filter-name> 
     <url-pattern>/*</url-pattern> 
    </filter-mapping> 

... 

하고 페이지는 다음과 같습니다

<%@ page language="java" contentType="text/html; charset=UTF-8" 
    pageEncoding="UTF-8"%> 
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %> 
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %> 
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 
<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 

... 

<form:form method="post" commandName="user"> 

... 

<form:input path="firstName" cssErrorClass="form-error-field"/> 

... 

나는 그 첫 번째 이름에 일부 감자 문자를 입력 할 때 system.out.println의 출력은 ????+????? 또는 이와 비슷한 값입니다.

다른 사람들이 CharacterEncodingFilter을 사용하여이 문제를 해결하는 것을 보았지만 제대로 작동하지 않는 것 같습니다.

고마워요.

필터 값을 편집했습니다.

+0

네가 맞다면, 나는 여러 가지 것들을 테스트하고 있었고 그것을 다시 편집하는 것을 잊어 버렸다. –

답변

2

아마도 JSP에서 페이지 인코딩이 "UTF-8"인 경우 CharacterEncodingFilter의 인코딩이 ISO-8859-7이 아닌 UTF-8이되어서는 안됩니까?

0

System.out.println()의 출력은 콘솔 인코딩에 따라 다르므로 인코딩 문제를 디버깅하는 좋은 방법은 아닙니다.

값이 올바르게 디코딩되었는지 확인하려면 다른 페이지에 값을 표시해야합니다. 실제로 양식 유효성 검증 실패의 경우 이미 완료되었으므로 필드의 값이 유효성 검증 오류 후 동일하게 유지되면 시스템이 올바르게 작동합니다.

7

이 여전히 작동하지 않고 응용 프로그램 서버가 server.xml의 모든 <Connector> 요소에서 다음 옵션을 설정하려고로 Tomcat을 사용하는 경우 : 나를 위해

<Connector URIEncoding="UTF-8" ...> 
    ... 
</Connector> 

이했던 트릭. 다른 응용 프로그램 서버와 유사한 옵션이있을 수 있으므로 서버 설명서를 확인하십시오.

+0

이 문제가 해결되었습니다. 내게 똑같은 문제가 수정되었습니다. – Kerb

11

CharacterEncodingFilter를 web.xml의 첫 번째 필터로 사용해보십시오.

나는이 질문이 조금 오래되었다는 것을 알고 있지만, 나는 똑같은 문제에 부딪쳤다. 그리고 CharacterEncodingFilter를 움직이면 나를 위해 그것을 고쳤다.

1

양식에 accept-charset = "UTF-8"을 추가해야합니다.

+0

이것이 저의 트릭입니다. 고맙습니다! – Robin

0

수 있도록 두 가지가있다 : 당신의 setenv.sh 파일에서

  1. LANG 환경, 톰캣 프로세스를 시작 스크립트에서 JAVA_OPTS="$JAVA_OPTS -Dfile.encoding=utf-8"
  2. 를 추가 설정 : export LANG='utf-8'

이 다음 수는 기본 문자 집합 인 Charset.defaultCharset()을 검사하여 테스트 해보십시오.

관련 문제