Programing

Spring MVC의 UTF-8 인코딩, FORM 문제

lottogame 2020. 11. 28. 08:32
반응형

Spring MVC의 UTF-8 인코딩, FORM 문제


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>

그리고 file.jsp 맨 위에 다음이 있습니다.

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

<head>이 :

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />

POST 메소드를 사용하여 FORM에서 설정된 latin-1 이외의 문자는 여전히 올바르지 않습니다.


나는 이것을 해결했다.

web.xml의 해당 필터는 파일의 첫 번째 필터 여야합니다.


비슷한 문제가있었습니다. 양식을 게시하고 DB에 저장하면 ??????로 삽입됩니다. 하지만 MySQL WorkBench를 사용하여 수동으로 DB에 삽입하면 제대로 작동합니다.

문제는 http 요청 인코딩에만 있다고 생각했습니다. 그래서, 나는 거의 내가 변경 등이 문제에 대해 발견 된 모든 권고 구현 의 server.xml을 에 필터를 추가, web.xml을 와 MySQL 설정 파일에 설정을 변경 의 my.ini 하지만 내 문제가 해결되지 않습니다.

문제는 http 요청 인코딩JDBC 연결의 두 가지 때문이었습니다 . 어떤 이유로 MySQL은 UTF-8이 아닌 ISO-8859-1로 데이터를 허용합니다.

그래서 모든 변경 사항을 되 돌렸고 아래 두 가지 변경 사항을 적용했습니다. Tomcat server.xml을 아래와 같이 변경합니다.

<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443"  URIEncoding="UTF-8" />

Jdbc 연결 속성을 아래와 같이 변경합니다.

jdbc.driver_class=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost/dB_Name?useUnicode=yes&characterEncoding=UTF-8
jdbc.username=root
jdbc.password

여기서 솔루션 키는 useUnicode = yes & characterEncoding = UTF-8을 추가하는 것입니다.

** web.xml : ** 에서 @jbb와 같은 필터를 추가합니다 .

<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>

Thymeleaf를 사용하는 경우 viewResolver 및 TemplateResolver를 아래와 같이 변경합니다.

viewResolver.setCharacterEncoding("UTF-8");
viewResolver.setContentType("text/html; charset=UTF-8");

templateResolver.setCharacterEncoding("UTF-8");

Note that this works only for POST requests. If you want to code also GET requests (i.e. links with <a href=...>), you will have to modify your server's server.xml file, by adding URIEncoding="UTF-8" useBodyEncodingForURI="true" attributes in the <Connector> tag.

See : http://wiki.apache.org/tomcat/FAQ/CharacterEncoding

참고URL : https://stackoverflow.com/questions/5141403/utf-8-encoding-in-spring-mvc-problem-with-forms

반응형