SpringBoot——SpringBoot设置字符集编码

1 SpringBoot设置字符集编码

SpringBoot设置字符集编码有两种方式

方式一:使用传统的 Spring 提供的字符编码过滤器

方式二:在 application.properties 中配置字符编码(推荐)

2  方式一:使用传统的 Spring 提供的字符编码过滤器

先写个servlet

package com.liuhaiyang.springboot.servlet;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

@WebServlet(urlPatterns = "/myservlet")
public class MyServlet extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        resp.getWriter().println("欢迎使用springboot框架,美丽的世界啊");
        //设置统一的浏览器编码格式
        resp.setContentType("text/html;character=utf-8");
        resp.getWriter().flush();
        resp.getWriter().close();
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        super.doPost(req, resp);
    }
}

创建配置类 SystemConfig,在其中声明字符集过滤器的相关配置。

package com.liuhaiyang.springboot.config;

import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.filter.CharacterEncodingFilter;

@Configuration  //将此类定义为配置文件
public class SystemConfig {
    @Bean
    public FilterRegistrationBean myFilterRegistrationBean(){
        //创建字符编码过滤器
        CharacterEncodingFilter characterEncodingFilter=new CharacterEncodingFilter();
        //设置强制使用指定字符编码
        characterEncodingFilter.setForceEncoding(true);
        //设置指定字符编码
        characterEncodingFilter.setEncoding("utf-8");

        FilterRegistrationBean filterRegistrationBean=new FilterRegistrationBean();
        //设置字符编码过滤器
        filterRegistrationBean.setFilter(characterEncodingFilter);
        //设置字符编码过滤器路径
        filterRegistrationBean.addUrlPatterns("/*");

        return filterRegistrationBean;
    }
}

在SpringBoot核心配置文件中 关闭 SpringBoot 的 的 http 字符编码支持。

#关闭springboot的http字符集编码支持
#只有关闭了该选项后,spring字符集编码过滤器才能成效
server.servlet.encoding.enabled=false

启动类

package com.liuhaiyang.springboot;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.web.servlet.ServletComponentScan;

@SpringBootApplication
@ServletComponentScan(basePackages = "com.liuhaiyang.springboot.servlet")
public class SpringbootTest15Application {

    public static void main(String[] args) {
        SpringApplication.run(SpringbootTest15Application.class, args);
    }

}

结果截图:

 

 3 方式二:在 application.properties 中配置字符编码(推荐)

 创建一个servlet类。

package com.liuhaiyang.springboot.servlet;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

@WebServlet(urlPatterns = "/myservlet")
public class MyServlet extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        resp.getWriter().println("欢迎使用springboot框架,美丽的世界啊,第二种方式设置字符集编码");
        //设置统一的浏览器编码格式
        resp.setContentType("text/html;character=utf-8");
        resp.getWriter().flush();
        resp.getWriter().close();
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        super.doPost(req, resp);
    }
}

SpringBoot 核心配置文件添加字符编码设置。

#第二种方式,直接在核心配置文件上操作
#设置请求响应字符编码
server.servlet.encoding.enabled=true
server.servlet.encoding.force=true
server.servlet.encoding.charset=utf-8

启动测试(同样需要指定servlet类的位置,方法同上的启动类)

 

### SpringBoot后台输出乱码解决方案 在SpringBoot应用中,如果遇到后台控制台输出中文字符时出现乱码的情况,通常是因为字符编码设置不一致所导致。以下是几种常见的解决方法: #### 方法一:配置`application.properties`或`application.yml` 可以通过修改项目的配置文件来指定默认的字符集为UTF-8。 对于`application.properties`文件: ```properties server.servlet.encoding.charset=UTF-8 server.servlet.encoding.enabled=true server.servlet.encoding.force=true ``` 或者,在`application.yml`文件中可以这样写: ```yaml server: servlet: encoding: charset: UTF-8 enabled: true force: true ``` 以上配置强制指定了服务器端使用的字符集为UTF-8[^1]。 #### 方法二:通过JVM参数设置字符编码 可以在启动SpringBoot应用程序时,通过命令行传递JVM参数来设定系统的默认字符编码为UTF-8。例如: ```bash java -Dfile.encoding=UTF-8 -jar your-application.jar ``` 此方式适用于任何依赖于系统默认字符编码的地方,包括读取文件、打印到控制台等操作[^3]。 #### 方法三:IDE内部设置 如果是使用IDE(如IntelliJ IDEA 或 Eclipse)运行程序,则还需要检查IDE本身的字符编码设置是否正确。以IntelliJ IDEA为例,需进入 `File -> Settings -> Editor -> File Encodings` ,将全局编码(Global Encoding) 和 项目编码(Project Encoding) 设置成UTF-8。 另外还需确认Console Output 的编码也设为了UTF-8。这一步骤同样重要,因为即使源代码和输入数据都是UTF-8 编码,但如果控制台显示采用其他编码格式仍然会出现乱码现象。 #### 方法四:引入合适的Starter并调整MyBatis相关配置 (如果有涉及数据库) 当项目中有用到MyBatis框架进行持久层开发时,可能也需要关注其SQL语句执行过程中产生的日志信息是否会存在乱码情况。此时可考虑利用官方提供的starter包——mybatis-spring-boot-starter 来简化集成过程的同时确保所有组件间保持统一的字符处理逻辑[^2]。 最后提醒一点就是除了上述技术手段外还应该养成良好习惯比如保存文件前总是记得转换为目标平台支持的标准编码形式等等这样才能从根本上杜绝此类问题发生。 ```python print("测试输出是否正常") ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值