springboot全局字符编码设置(解决乱码问题)

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站​​​​​​​

有时候我们会发现这种问题,明明已经设置了字符编码过滤器但是还会有乱码的情况出现,这个问题令我们很是头疼,我之前也遇到过这种情况。那怎么解决呢?

springboot编码格式设置有三种方式,不管使用哪种方式,总有一款适合你。

1、在application.properties中设置

#编码格式
spring.http.encoding.force=true
spring.http.encoding.charset=UTF-8
spring.http.encoding.enabled=true
server.tomcat.uri-encoding=UTF-8

如果出现乱码问题,这种方式解决的可能性不大,但可以尝试一下,希望还是要有的,万一解决了呢,因为查看源码发现springboot默认的编码格式就是UTF-8

2、自己手写编码过滤器

//字符编码过滤器
@WebFilter(urlPatterns = "/*",filterName = "CharacterEncodingFilter")
public class CharacterEncodingFilter implements Filter{
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
    }

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        HttpServletRequest request = (HttpServletRequest) servletRequest;
        HttpServletResponse response = (HttpServletResponse) servletResponse;
        request.setCharacterEncoding("UTF-8");
        response.setCharacterEncoding("UTF-8");

        filterChain.doFilter(request , response);
    }
    @Override
    public void destroy() {
    }
}
如果这种方式也解决不了问题的话,只能使用最后一种方式了。

3、使用java配置写一个字符编码配置类

/**
 * 中文乱码解决
 */
@Configuration
public class CharsetConfig extends WebMvcConfigurerAdapter {
    @Bean
    public HttpMessageConverter<String> responseBodyConverter() {
        StringHttpMessageConverter converter = new StringHttpMessageConverter(
                Charset.forName("UTF-8"));
        return converter;
    }
    @Override
    public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
        super.configureMessageConverters(converters);
        converters.add(responseBodyConverter());
    }
    @Override
    public void configureContentNegotiation(ContentNegotiationConfigurer configurer) {
        configurer.favorPathExtension(false);
    }
}
StringHttpMessageConverter是一个请求和响应信息的编码转换器,通过源码我们发现默认编码ISO-8859-1,不是UTF-8,所以我们只要通过上述配置将请求字符串转为UTF-8 即可

WebMvcConfigurerAdapter 是springmvc的一个配置支配器类,我们可以实现我们感兴趣的方法。

其实现的接口WebMvcConfigurer 定义了一些回调方法为springmvc提供一个通道通过java基本的配置。

能力一般,水平有限,如有错误,请多指出。
如果对你有用点个关注给个赞呗,
如果对你有用,可以关注一下我的微信公众号suncodernote

### SpringBoot 网关 请求头 中文乱码 解决方案 在 SpringCloud 的 Zuul 网关环境中,当通过网关传递带有中文字符的请求头时可能会遇到乱码问题。这种现象通常是因为 Zuul 对请求头中的编码未作适当处理所致。以下是针对此问题的一种常见解决方案。 #### 1. 修改 Zuul 过滤器以支持 UTF-8 编码 可以通过自定义 ZuulFilter 来调整请求头的编码方式。具体做法是在过滤器中设置 `Content-Type` 和 `CharacterEncoding` 属性,从而确保数据能够被正确解析为 UTF-8 格式[^2]。 ```java import com.netflix.zuul.ZuulFilter; import com.netflix.zuul.context.RequestContext; import org.springframework.cloud.netflix.zuul.filters.support.FilterConstants; public class EncodingFilter extends ZuulFilter { @Override public String filterType() { return FilterConstants.PRE_TYPE; // 设置为预处理阶段 } @Override public int filterOrder() { return FilterConstants.SEND_RESPONSE_FILTER_ORDER - 1; // 执行顺序靠前 } @Override public boolean shouldFilter() { return true; // 总是执行该过滤器 } @Override public Object run() { RequestContext ctx = RequestContext.getCurrentContext(); ctx.getResponse().setCharacterEncoding("UTF-8"); // 设置响应编码为 UTF-8 return null; } } ``` 上述代码片段展示了如何创建一个自定义的 ZuulFilter,并将其应用于所有经过网关的请求。它强制设置了 HTTP 响应的字符集为 UTF-8,从而避免因默认编码不一致而导致的乱码问题。 #### 2. 配置 application.yml 文件 除了编写自定义过滤器外,还可以尝试在项目的全局配置文件中指定编码规则: ```yaml server: servlet: encoding: charset: UTF-8 enabled: true force: true zuul: codecs: string: defaultCharset: UTF-8 ``` 以上 YAML 配置项的作用在于显式声明服务器端使用的字符集以及是否启用强制模式。其中 `force: true` 表示无论客户端发送何种编码形式的数据,服务端均按照 UTF-8 进行解码操作[^3]。 #### 3. 使用 Base64 编码传输敏感信息 对于某些特殊场景下仍然存在乱码的情况,则建议采用更稳健的方式——即先将包含汉字的内容转换成 Base64 字符串再放入 Header 中传送;接收方收到后再还原原始字符串即可规避潜在风险。 ```java // 发送端:Base64 加密过程 String originalText = "你好世界"; byte[] bytesEncoded = java.util.Base64.getEncoder().encode(originalText.getBytes(StandardCharsets.UTF_8)); String encodedText = new String(bytesEncoded); // 接收端:Base64 解密过程 byte[] decodedBytes = java.util.Base64.getDecoder().decode(encodedText); String recoveredText = new String(decodedBytes, StandardCharsets.UTF_8); ``` 这种方法虽然增加了少量计算开销,但却极大地提高了跨平台兼容性和稳定性[^1]。 --- ### 相关问题
评论 18
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

索码理

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值