JavaWeb中文乱码的种种情况

编程入门 行业动态 更新时间:2024-10-26 16:33:53

JavaWeb中文<a href=https://www.elefans.com/category/jswz/34/1768993.html style=乱码的种种情况"/>

JavaWeb中文乱码的种种情况

目录

 

第一种:jsp页面中文乱码

概述

错误代码

乱码展示

解决

正确展示

正确代码

第二种:html页面中文乱码

概述

错误代码

乱码展示

解决

正确展示

正确代码

第三种:通过request.getParameter(name)获取表单提交

概述

错误代码

乱码展示

解决

正确展示

正确代码

第四种:通过request.getParameter(name)获取URL地址中的中文参数

概述

错误代码

乱码展示

解决

正确展示

正确代码

第五种:SpringMVC通过在web.xml文件配置过滤器来处理中文乱码

概述

解决

其他

设置IDEA编码

设置JVM启动参数

设置tomcat编码


第一种:jsp页面中文乱码

概述

即在jsp文件中存在中文,但是运行后,在浏览器显式却是中文乱码。

错误代码

<html>
<body><h2>Hello World!</h2><h1>你好!</h1>
</body>
</html>

乱码展示

解决

在每个jsp文件顶部添加配置:

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

正确展示

正确代码

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<body><h2>Hello World!</h2><h1>你好!</h1>
</body>
</html>

第二种:html页面中文乱码

概述

即在html文件中存在中文,但是运行后,在浏览器显式却是中文乱码。

错误代码

<!DOCTYPE html>
<html lang="en">
<head>
</head>
<body>
<h2>Hello World!</h2>
<h1>你好!</h1>
</body>
</html>

乱码展示

解决

在<head>标签中设置中文代码:

<meta charset="UTF-8">

正确展示

正确代码

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8">
</head>
<body><h2>Hello World!</h2><h1>你好!</h1>
</body>
</html>

第三种:通过request.getParameter(name)获取表单提交

概述

在Servlet中通过req.getParameter("username")获取提交的参数是中文乱码。

错误代码

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;public class SubmitServlet extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {System.out.println("get...");System.out.println(req.getParameter("username"));}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {System.out.println("post...");System.out.println(req.getParameter("username"));}
}

乱码展示

  • post请求乱码

  • get请求乱码

解决

不过本项目可能是环境的原因,需要在tomcat上配置-Dfile.encoding=UTF-8

  • post请求解决

在doPost方法中设置请求的编码格式

// 设置请求的编码格式
req.setCharacterEncoding("UTF-8");
  • get请求解决

这里说的get请求是指method="get",而不是地址上直接写参数。

需要对内容进行转码处理。

// 对获取内容进行转码
String username = req.getParameter("username");
String s = new String(username.getBytes("ISO-8859-1"), "UTF-8");

正确展示

浏览器页面展示:

控制台打印:

正确代码

public class SubmitServlet extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {System.out.println("get...");// 对获取内容进行转码String username = req.getParameter("username");String s = new String(username.getBytes("ISO-8859-1"), "UTF-8");System.out.println(s);}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {System.out.println("post...");// 设置请求的编码格式req.setCharacterEncoding("UTF-8");String username = req.getParameter("username");System.out.println(username);}
}

第四种:通过request.getParameter(name)获取URL地址中的中文参数

概述

在浏览器的地址栏中读取中文参数是乱码。

错误代码

public class SubmitServlet extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {// 对获取内容进行转码String username = req.getParameter("username");System.out.println(username);}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {doGet(req, resp);}
}

乱码展示

解决

对读取结果进行解码。

// 对获取内容进行转码
String username = req.getParameter("username");
String s = new String(username.getBytes("ISO-8859-1"), "GBK");

正确展示

在浏览器的地址栏直接输入参数。

控制台打印:

正确代码

public class SubmitServlet extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {// 对获取内容进行转码String username = req.getParameter("username");String s = new String(username.getBytes("ISO-8859-1"), "GBK");System.out.println(s);}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {doGet(req, resp);}
}

第五种:SpringMVC通过在web.xml文件配置过滤器来处理中文乱码

概述

在web.xml文件中配置过滤器来处理中文乱码。

解决

在web.xml文件中添加如下代码,<filter>标签必须在其他标签之前。

    <!-- 避免中文乱码 --><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></filter><filter-mapping><filter-name>characterEncodingFilter</filter-name><url-pattern>/*</url-pattern></filter-mapping>

就像下面这样:

然后就可以了。

注意上面的配置必须是表单提交,如下这种:

如果是在地址URL上进行,如下这种:

就需要把上面的<param-value>UTF-8</param-value>改为<param-value>GBK</param-value>

其他

设置IDEA编码

设置JVM启动参数

设置参数为:-Dfile.encoding=UTF-8

设置tomcat编码

打开所使用tomcat所在目录下的server.xml文件:

原来的是:

    <!-- A "Connector" represents an endpoint by which requests are receivedand responses are returned. Documentation at :Java HTTP Connector: /docs/config/http.html (blocking & non-blocking)Java AJP  Connector: /docs/config/ajp.htmlAPR (HTTP/AJP) Connector: /docs/apr.htmlDefine a non-SSL/TLS HTTP/1.1 Connector on port 8080--><Connector port="8080" protocol="HTTP/1.1"connectionTimeout="20000"redirectPort="8443" URIEncoding="UTF-8"/>

替换为:

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

即如下图所示:

上面几种方法都试了的话,基本上就可以解决javaWeb中的乱码问题了。

本篇文章代码地址

更多推荐

JavaWeb中文乱码的种种情况

本文发布于:2024-03-05 01:23:47,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1710946.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:乱码   中文   情况   JavaWeb

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!