.NET Web API使用Jenkins构建部署,导致接口响应体内容中文乱码?
环境
宿主机:Linux Centos8 x86_64
Jenkins Version:2.504.2
.NET SDK:6.0.425
问题简介
本地Windows环境使用dotnet publish命令编译打包后部署正常,使用Linux环境下Jenkins流水线方式构建部署(同使用dotnet publish命令)导致接口响应体内容中文乱码,如下图所示:

问题解决
原因是项目中对应.cs文件的编码格式与服务器上本地化设置的编码不匹配/兼容,比如.cs文件编码格式为gb2312,而服务器上设置的编码为en_US.UTF8就会出现中文乱码问题,所以只要修改.cs文件的编码格式让其与服务器编码匹配/兼容即可。
直接在编辑器中修改,我是使用的cursor,操作如下图所示。

如果你用的是VS或其他编辑器的话,可自行查找修改方式。
修改完成后重新运行Jenkins构建部署,问题解决。

问题分析
在排查过程中一直有个疑问,为什么本地Windows上可以自动兼容gb2312编码的格式,Linux环境下不可以,而且还发现部分接口响应体编码正常,部分会有乱码问题。
Linux使用locale命令查看本地化设置,输出如下:

本地Windows使用chcp命令查看编码格式,输出如下:

如上所示Linux环境编码格式为en_US.UTF8,Windows环境编码格式为GBK(活动代码页输出936代表简体中文GBK),因为GBK是可以兼容gb2312的,而我的Jenkins运行在Linux上,依赖宿主机的编码环境,所以就会有本地Windows环境下打包编译发布后正常,使用Jenkins会有中文乱码问题。
至于部分接口乱码的原因是因为我是个别.cs文件编码格式是gb2312,所以推荐使用.editorconfig来约束或统一文件的编码格式。
参考文章记录
至此本次分享就结束了,希望这些能帮助到您,如文中内容有误或者您有其他看法,还望在评论区指正或讨论。
END

浙公网安备 33010602011771号