问题:
发布一个新的接口,接口的字符集是GBK,发布生产后接收的中文一直乱码。其它接口字符集是UTF-8。需要应用支持多字符集。
原因:
springboot处理http requests请求统一默认字符集为UTF-8。
解决思路:
继续阅读源码CharacterEncodingFilter过滤器的doFilterInternal方法可以发现,isForceRequestEncoding()默认为true,所以如果没有设置,始终都会强制将requests请求的字符集设置为UTF-8。所以需要我们增加配置将强制设置字符集关闭 spring.http.encoding.force = false 增加配置后如果请求方没有设置字符集就会默认使用UTF-8,如果请求方设置了字符集就使用请求方的字符集,这样就可以实现不同接口使用不同的字符集的需求。
最后:
在排查问题过程中为了更好了解乱码,下面这张图很有用。