Save Chinese characters with Spring-MVC / Java

2020-08-01 06:03发布

问题:

I'm trying to save Chinese characters from a form submit into the database.

I've set the contentType on the jsp via

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

I've also set this tag inside the of the jsp:

<META HTTP-EQUIV="content-type" CONTENT="text/html; charset=UTF-8" />

However, when I submit the form, my controller sees a different character than what I entered.

I am entering the character 我 and seeing æ?? in the controller. When the data redisplays on the page, it shows the same wrong character (æ??).

Why isn't the controller getting the correct character?

回答1:

Declare a CharacterEncodingFilter in your web.xml file before any other filter

<filter>
    <filter-name>charsetFilter</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>
</filter>

<filter-mapping>
    <filter-name>charsetFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

In your jsp file try adding this at the very start of the file:

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


回答2:

Not all browsers will respect the character set you've specified in the page or the form. Spring provides a filter, the CharacterEncodingFilter, that can add a character encoding or force a particular encoding, as the request comes in and before it hits the controller.



回答3:

Add an accept-charset attribute to your form:

<form method="POST" accept-charset="utf-8" ... >

This tells the browser to submit your form contents as UTF-8 to the server.