一招教你如何解决中文乱码(中文乱码有什么意义)

createh54个月前 (02-01)技术教程24

#头条创作挑战赛#

前言

在开发JavaWeb项目时,由于不同的浏览器和服务器对请求和响应处理的编码格式不同,从而导致了中文乱码的现象出现。同时许多的编码方式对中文的处理并不是特别好,所以一般我们需要对请求和响应做出统一的配置,即设置编码集为UTF-8。这篇文章将会告诉你出现乱码到底是怎样解决的。

方法一:直接在Servlet中配置

处理乱码时最直接的方式就是在Servlet中对请求和响应进行配置。具体配置如下:

//设置请求编码格式
request.setCharacterEncoding("utf-8");
//设置响应的编码格式
response.serCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");

这种方式是最简单直接的方法,但是它也存在一个很大的问题。当业务量多起来时,需要为每个Servlet都加上这几行代码,造成了代码冗余。所以需要想办法把这几行代码抽离出来

方法二:使用过滤器处理乱码

在介绍这种方法之前先来了解一下什么是过滤器

1、什么是过滤器?

过滤器是介于浏览器和web资源之间的,它的作用是将浏览器发来的请求进行“过滤”后再发送给web资源,然后再把web资源返回的响应“过滤”后再返回给浏览器。它的用处也有很多,处理乱码只是其众多功能之一。

上一张图具体描述一下这个流程吧

2、如何利用过滤器处理乱码

使用过滤器处理乱码,首先得有一个过滤器的类

package com.demo.filter;

import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import java.io.IOException;

public class MyFilter implements Filter {
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {

    }

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        //统一处理请求和响应的乱码
        servletRequest.setCharacterEncoding("utf-8");
        servletResponse.setCharacterEncoding("utf-8");
        servletResponse.setContentType("text/html;charset=utf-8");
        //处理过后放行
        filterChain.doFilter(servletRequest,servletResponse);
    }

    @Override
    public void destroy() {

    }
}

写好过滤器后有两种方式可以使过滤器发挥其功效,分别是在web.xml中配置标签和使用注解的方式

  • 在web.xml中配置
<filter>
        <!--
  							filter-class 标签用来配置过滤器的位置 ,格式为包名+类名
                filter-name 标签相当于给过滤器起个别名  
         -->
        <filter-name>myFilter</filter-name>
        <filter-class>com.demo.filter.MyFilter</filter-class>
</filter>
<filter-mapping>
          <!-- 
                filter-name  标签内容要与上边配置的名字相同
                url-pattern   标签要拦截的请求名    /* 表示拦截所有请求
          -->
        <filter-name>myFilter</filter-name>
        <url-pattern>/*</url-pattern>
</filter-mapping>
  • 使用注解配置

可以使用注解的方式来配置过滤器,不过如果使用了注解就不要再使用web.xml的配置,二者选一种就好,具体方法为:

//在过滤器类上方加上注解@WebFilter ,然后依然通过/* 表示拦截所有请求
@WebFilter("/*")
public class MyFilter implements Filter {
	   .....
}

相关文章

彻底搞定JAVA乱码问题来龙去脉(java如何处理乱码)

在从事JAVA软件程序开发过程中之所以遇到乱码,问题根本原因是解码和编码不一致造成的,比如将某字符串采用utf8编码存入txt,但是读出时却采用gbk,那么打印字符串时输出肯定是会出现乱码的。这个根本...

IDEA中控制台输出是中文显示乱码(idea控制台中文输出是问号)

最近学习JAVA,作为一个新手小白,对编程的认知为0。跟随网上的教程学习,安装上IDEA工具后,每次输入语句中有中文时,只要执行就会显示乱码,太搞心态。问题如下图:作为小白,有问题肯定找度娘呀,可这次...

Servlet总结十三:程序乱码解决方案

乱码经常出现在什么位置数据保存过程中的乱码数据展示过程中的乱码数据传递过程中的乱码数据保存过程中的乱码数据保存到数据库表中的时候,数据出现乱码导致数据保存过程中的乱码包括以下两种情况:前一种情况:在保...

使用httpclient post请求中文乱码解决办法

【ps:本文为凯哥java实际工作中要到错误系列教程,在文章末尾会有本系列其他教程传送门】 概要:在使用httpclient发送post请求的时候,接收端中文乱码问题解决。正文:我们都知道,一般情况下...

eclipse怎么批量修改java文件编码使用操作流程

小伙伴们在使用eclipse时会批量修改java文件编码吗?小编今天带来的就是证明使用eclipse批量修改java文件编码的操作步骤,有需要的小伙伴可以来看看。首先你需要如下图所示打开eclipse...

避坑手册 | JAVA编码中容易踩坑的十大陷阱

JAVA编码中存在一些容易被人忽视的陷阱,稍不留神可能就会跌落其中,给项目的稳定运行埋下隐患。此外,这些陷阱也是面试的时候面试官比较喜欢问的问题。本文对这些陷阱进行了统一的整理,让你知道应该如何避免落...