복붙노트

[SPRING] Spring MVC를 이용한 인코딩 문제

SPRING

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를 사용하여 다른 사람들이 수정 한 것을 보았지만 이것이 효과가없는 것 같습니다.

고마워.

필터 값을 편집했습니다.

해결법

  1. ==============================

    1.Web.xml에서 CharacterEncodingFilter를 첫 번째 필터로 사용해보십시오.

    Web.xml에서 CharacterEncodingFilter를 첫 번째 필터로 사용해보십시오.

    나는이 질문이 조금 오래되었다는 것을 알고 있지만, 나는 똑같은 문제를 겪었고, CharacterEncodingFilter를 움직이면 나를 고칠 수 있었다.

  2. ==============================

    2.그래도 여전히 작동하지 않고 응용 프로그램 서버로 Tomcat을 사용하고 있다면 server.xml의 모든 요소에 다음 옵션을 설정하십시오.

    그래도 여전히 작동하지 않고 응용 프로그램 서버로 Tomcat을 사용하고 있다면 server.xml의 모든 요소에 다음 옵션을 설정하십시오.

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

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

  3. ==============================

    3.어쩌면 내가 뭔가를 놓치고 있어도 JSP에서 페이지 인코딩이 "UTF-8"인 경우 CharacterEncodingFilter의 인코딩이 ISO-8859-7이 아닌 UTF-8이되어서는 안됩니까?

    어쩌면 내가 뭔가를 놓치고 있어도 JSP에서 페이지 인코딩이 "UTF-8"인 경우 CharacterEncodingFilter의 인코딩이 ISO-8859-7이 아닌 UTF-8이되어서는 안됩니까?

  4. ==============================

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

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

  5. ==============================

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

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

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

  6. ==============================

    6.도움이되는 두 가지 사항이 있습니다.

    도움이되는 두 가지 사항이 있습니다.

    그런 다음 Charset.defaultCharset ()을 검사하여 테스트 할 수 있습니다.

  7. from https://stackoverflow.com/questions/2958497/encoding-problem-using-spring-mvc by cc-by-sa and MIT license