当前位置: 首页 > 知识库问答 >
问题:

如何配置Spring Boot应用程序以支持UTF-8和GBK编码?

蒯翰墨
2023-03-14

我在我的项目中使用spring boot,我运行了一些编码问题。

在该项目中,有一个控制器(如下)接受带有内容类型标头的请求,“application/x-www-form-urlencoded;charset=GBK”。

@RequestMapping(value = "/notify",headers ={"Content-Type=application/x-www-form-urlencoded;charset=GBK"} , method = RequestMethod.POST, produces = "application/x-www-form-urlencoded; charset=GBK")
public ResponseEntity<String> notify(@RequestParam(name = "p") String plain, @RequestParam("s") String signature), HttpServletRequest request){}

当第三方调用此api时,他们使用GBK对请求体进行编码。一旦正文包含中文字符集,我得到的参数就错了,这是不可读的,类似这样的“结果”������Ʒ".

因为客户端使用GBK encode发送请求体,而Spring Boot使用UTF-8解码请求体,UTF-8是Spring Boot的默认字符集编码。

该项目由不同的第三方提供,其中大多数使用UTF-8,因此我无法通过以下配置yml文件将项目编码更改为GBK:

spring:
  http:
    encoding:
      charset: GBK
        enabled: true

所以我的第一个想法是反转我得到的错误字符串。但是我没有通过下面的测试。

String para = "p=result中文的&s=ad98adj";
byte[] bytes = para.getBytes("GBK");

ByteChunk byteChunk = new ByteChunk();
byteChunk.setBytes(bytes , 0 , bytes.length);
byteChunk.setCharset(Charset.forName("utf-8"));
String receive = byteChunk.toString();//this is the wrong string

//reverse
byteChunk.reset();
bytes = receive.getBytes("GBK");
byteChunk.setBytes(bytes , 0 ,bytes.length);
byteChunk.setCharset(Charset.forName("GBK"));
receive = byteChunk.toString(); //still the wrong string

那么,我如何使用单个Spring Boot应用程序来支持GBK和UTF-8编码请求呢。

共有2个答案

楮星鹏
2023-03-14

我遇到了类似的问题,发现Spring Boot默认启用了“forceEncode”。这会导致请求字符集每次在其过滤器中被覆盖并设置为UTF-8。

参见附录A。常见的应用程序属性

关键部分是:

未指定“力”时,默认为true。

所以设置

spring.http.encoding.force=false

spring.http.encoding.force-request=false

只要请求具有正确的标头,就可以解决您的问题。

花高爽
2023-03-14

添加CharacterEncodingFilter bean可以解决这个问题https://github.com/spring-projects/spring-boot/issues/1182

@Bean
CharacterEncodingFilter characterEncodingFilter() {
    CharacterEncodingFilter filter = new CharacterEncodingFilter();
    filter.setEncoding("UTF-8");
    filter.setForceEncoding(true);
    return filter;
}
 类似资料:
  • 请查看Servlet类中的注释。如果将更改为,则无法访问应用程序。 为什么会出现这个问题?

  • 本文向大家介绍Java gbk转utf-8,包括了Java gbk转utf-8的使用技巧和注意事项,需要的朋友参考一下 1、文件转码:使用脚本 gbk转utf-8的脚本文件: 2、文件转码后,本地环境改成utf-8环境,可能会有部分乱码文件,手动修复 3、含有中文js引用增加charset="gbk"    如依赖:static.360buying.com、shop.jd.com 4、打包编译编码

  • 问题内容: 我希望我的React.js应用程序中的类可以从-files中导出,就像从CSS模块中导出时一样,但是我找不到任何现成的解决方案来解决这个问题。 我找到了在使用Create React App创建的应用程序中设置CSS模块的指南。 我了解您需要运行并以某种方式重写配置文件, 但是如何-我不明白。 问题答案: 您需要在项目中安装下一个npm-packages: 手写笔 测针器 CSS加载器

  • 我正在使用JavaSpring框架创建一个时事通讯API。每当我以请求模型的帖子的形式访问API时,我都会得到这个例外组织。springframework。网状物HttpMediaTypeNotSupportedException。 这是我的时事通讯模型 这是我的NewsletterMailerList模型 我给包含类型作为应用程序/json。我是新来做这种事情的。请帮助我为什么会出现这个错误。如

  • 本文向大家介绍ascii、unicode、utf-8、gbk 区别相关面试题,主要包含被问及ascii、unicode、utf-8、gbk 区别时的应答技巧和注意事项,需要的朋友参考一下  

  • 问题内容: 我想确保我对UTF-8的了解都是正确的。我已经尝试使用UTF-8一段时间了,但是我不断遇到越来越多的错误和其他怪异的东西,使得拥有100%UTF-8网站似乎几乎是不可能的。我似乎总是想念某个地方。也许有人可以改正我的清单或确定清单,所以我不会错过任何重要事项。 数据库 每个站点都必须将数据存储在某个地方。无论您使用什么PHP设置,都必须配置数据库。如果无法访问配置文件,请确保在连接后立