Servlet Chinese garbled Tomcat8

question:

ServletGetPost

Code:

JSP:
    <meta charset="UTF-8">
    <html>
    <body>
    <h2>Hello World!</h2>
    <form action="/login" method="post">
        username:<input type="text" name="username"><br/>
        pwd:<input type="password" name="pwd"><br/>
        <input type="submit" value="login" />
    </form>
    </body>
    </html>

Servlet:

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    request.setCharacterEncoding("UTF-8");
    String username = request.getParameter("username");
    String pwd = request.getParameter("pwd");
    System.out.println(username + " " + pwd);
}

Screenshot:

clipboard.png
clipboard.png

try method:

 requestsetCharacterEncodingUTF-8 UT-8 JSPUTF-8 Tomcat8
Mar.30,2021

modify server
clipboard.png


    under conf
  1. should try to avoid using non-ASCII characters in URL, otherwise you may encounter garbled code. It is best to set the parameters URIEncoding and useBodyEncdingForURI in our server
  2. .
  3. be sure to set request .setCharacterEncoding (charset), before calling the request.getParameter method for the first time, otherwise the data submitted by your POST form may be garbled

is embarrassing. The browser uses ASCII to decode by default, and you can adjust the browser decoding method to UTF-8


< H1 > check the code < / H1 >
  • Open a file
  • modify the encoding
code
by soarkey

java files, it is best to use UTF-8 encoding for all jsp file encodings.

for post requests
set request .setCharacterEncoding ("UTF-8") so that there is no garbled code in Chinese!

you can uniformly write a filter setting. If you use spring-mvc, you can configure it in web.xml

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

for get requests
if your request has a get, parameter in Chinese, for example, on the name= page, re-encode the url as follows:
frontend encodeURIComponent (encodeURIComponent (url)),.
backend: get the parameter value and decode it using URLDecoder.decode (s, "UTF-8"). This method is really feasible, and the respondent has always used it in the actual project.
give an example:
Front end:

<script type="text/javascript">
   var url = "/xxx/param/test";
     
     var name = "";
     
     name = encodeURIComponent(name);
     name = encodeURIComponent(name);//
     alert(name);
     url = url + "?name="+name;
     window.location.href = url;
     </script>

backend:

@Controller
@RequestMapping(value="/param")
public class ParamController extends BaseController<ParamEntity> {
    /**
     * @throws UnsupportedEncodingException 
     * 
     */
    @RequestMapping(value="/test",method=RequestMethod.GET)
    public String test(@RequestParam("name") String name) throws UnsupportedEncodingException{
        name = URLDecoder.decode(name, "UTF-8");//
        System.out.println(name);
        return "index";
    }
}

Note: the get request has Chinese parameters, and you can specify which encoding rules the container uses to decode the submitted parameters (someone replied to use this method, that is, to modify the URIEncoding parameter in the Connector in the tomcat configuration file), but this is not recommended. Secondary encoding is recommended.
Why do I need secondary coding? You can read the following blog posts:
eURIComponent Encoding twice

Menu