首页 > 编程知识 正文

springboot返回中文乱码,springboot写入文件乱码

时间:2023-05-06 01:13:01 阅读:16587 作者:4170

前言

过来,老铁!

笔者正在学习Spring Boot一段时间。 请附上Spring Boot系列的学习文章,阅读。 期待您的指导。

这是最近使用spring boot APP的一大技巧之一,还不能写文章。 今天我来介绍一下知识点。

如何解决Spring Boot中文乱码问题?

整体步骤

创建返回包含中文内容的API;

中文乱码演示;

解决中文乱码:(方法1 );

解决中文乱码:(方法2;

解决中文乱码:(方法3 ) -全球解决中文乱码问题;

中文常规显示演示;

汉语乱码原因分析;

1 .创建回复内容中包含中文的API

要将API添加到Spring Boot项目的控制器中,请执行以下操作:

@getmapping(/API/hello ) ) )。

公共JSON对象say hello () {

JSON对象test=new JSON object (;

test.put('name ',' dylanz ' );

test.put('say ','你好);

返回测试;

}

2 .中文乱码演示:

中文乱码演示

API回来后,英语会正常显示,但中文是乱码的。 不要分析原因,先看看怎么解决吧!

3 .解决中文乱码:

怎么解决,非常简单。 请修改API :

@getmapping(/API/hello ) ) )。

公共JSON对象say hello () {

httpservletresponseresponse=(servletrequestattributes ) objects.requirenonnull ) requestcontextholder.getrequestatribuestatribute

资产响应!=null;

response.setcharacterencoding (utf-8 );

JSON对象test=new JSON object (;

test.put('name ',' dylanz ' );

test.put('say ','你好);

返回测试;

}

原理非常简单,通过在正在回复的头信息中指定字符集为UTF-8,父测试非常有效!

纠正中文乱码

指定字符集为UTF-8

4 .解决中文乱码:(方法2 );

这个方法更简单,比第一个更简单。 只需在API中指定产品即可。 例如,以下情况:

@getmapping(value='/API/hello ',产品=' application/JSON; charset=UTF-8 ' )

公共JSON对象say hello () {

JSON对象test=new JSON object (;

test.put('name ',' dylanz ' );

test.put('say ','你好);

返回测试;

}

这种方式也能解决中文乱码问题,测试很有效!

5 .解决中文乱码:(方法3 ) -全球解决中文乱码问题;

解决上述中文乱码的两种方法很简单,但需要添加一个个的API。 这不符合我们的气质啊。 正确的态度是全球解决中文乱码问题。

在config包中创建新的CharsetConfig.java类,并将代码写入该配置类中。 不问类名。 不需要CharsetConfig。

package com.github.dylanz 666.config;

import com.Alibaba.fast JSON.serializer.serializer feature;

import com.Alibaba.fast JSON.support.config.fastjsonconfig;

import com.Alibaba.fast JSON.support.spring.fastjsonhttpmessageconverter;

importorg.spring帧work.context.annotation.bean;

importorg.spring framework.context.annotation.configuration;

importorg.spring framework.http.med

iaType;

import org.springframework.http.converter.HttpMessageConverter;

import org.springframework.http.converter.StringHttpMessageConverter;

import org.springframework.web.servlet.config.annotation.ContentNegotiationConfigurer;

import org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport;

import java.nio.charset.StandardCharsets;

import java.util.ArrayList;

import java.util.List;

/**

* @author : dylanz

* @since : 11/15/2020

*/

@Configuration

public class CharsetConfig extends WebMvcConfigurationSupport {

@Bean

public HttpMessageConverter responseBodyConverter() {

return new StringHttpMessageConverter(

StandardCharsets.UTF_8);

}

@Override

public void configureMessageConverters(

List> converters) {

super.configureMessageConverters(converters);

converters.add(responseBodyConverter());

FastJsonHttpMessageConverter fastConverter = new FastJsonHttpMessageConverter();

FastJsonConfig fastJsonConfig = new FastJsonConfig();

fastJsonConfig.setSerializerFeatures(

SerializerFeature.PrettyFormat

);

List fastMediaTypes = new ArrayList<>();

fastMediaTypes.add(MediaType.APPLICATION_JSON_UTF8);

fastConverter.setSupportedMediaTypes(fastMediaTypes);

fastConverter.setFastJsonConfig(fastJsonConfig);

converters.add(fastConverter);

}

@Override

public void configureContentNegotiation(

ContentNegotiationConfigurer configurer) {

configurer.favorPathExtension(false);

}

}

由于我使用的是fastjson,因此在configureMessageConverters中添加了fastjson对中文支持的配置代码。

编写完成后,删除(方法一)和(方法二)的支持代码后,重启项目,中文支持已经变成全局生效啦,亲测有效!

6. 中文正常显示演示;

中文正常显示演示

7. 中文乱码原因分析;

1). 借用第三步解决乱码问题的代码,稍微做一下修改,打印出修改前的字符集:

@GetMapping("/api/hello")

public JSONObject sayHello() {

HttpServletResponse response = ((ServletRequestAttributes) Objects.requireNonNull(RequestContextHolder.getRequestAttributes())).getResponse();

assert response != null;

System.out.println("Default charset: " + response.getCharacterEncoding());

JSONObject test = new JSONObject();

test.put("name", "dylanz");

test.put("say", "您好");

return test;

}

2). 再次启动项目并访问API后:

中文乱码原因

原因找到了,原来Spring Boot中的JSON默认字符集是:ISO-8859-1(如果返回是纯String,则字符集为UTF-8,且中文不会乱码)。

从浏览器或postman上也能看出默认的字符集设置:

默认字符集

3). 我们解决乱码后的字符集:

image.png

至此,我们从2个维度、3种方法,解决了Spring Boot项目中中文乱码的问题:

API单独设置字符集;

全局设置字符集;

要我说,肯定是全局设置字符集更香啊,您说呢?

如果本文对您有帮助,麻烦点赞、关注!

谢谢!

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。