jmeter请求返回中文乱码的解决方案
问题现象
搭建自动测试服务器时,发现使用jmeter 访问接口,其返回的内容中文会乱码。同样的接口使用postman进行测试,则呈现良好无乱码。服务器端接口返回的编码是utf-8编码。 显然,应该是jmeter 对返回内容的解析与服务器端返回的编码不一致导致的。推测,postman应该是默认用的utf-8编码,与浏览器一致。
第一步设置jmeter的默认编码
由于我的jmeter是mac上使用brew安装的,因此路径可能与windows等不同。
编辑 /usr/local/Cellar/jmeter/5.4.3/libexec/bin/jmeter.properties
文件
jmeter.properties
文件中搜索 sampleresult.default.encoding
找到的默认如下:
;sampleresult.default.encoding=ISO-8859-1
将其修改为
# 注意去掉行首的英文分号;
sampleresult.default.encoding=utf-8
重启jmeter 访问接口,问题依旧。于是,有了第二步。
第二步修改nginx默认编码
通过观察接口的返回头,发现Content-type:application/json
,并没有设置字符集。
而通常情况下返回的头应该是Content-type:application/json; charset=utf-8
,显然同时需要修改服务器端设置才行。
由于服务器端使用nginx作为代理服务器。因此直接可以在nginx.conf修改配置
在 server或location 节点内,增加如下设置
# charset_type 用表示应用与该类型的返回,*标识用于所有类型的返回
charset_types *;
# 设置返回的内容编码为utf-8
charset utf-8;
保存后,重启nginx
nginx -s reload
第三步确认编码效果
在jmeter中再次请求该接口,此时发现返回的头为Content-type:application/json; charset=utf-8
,并且结果中的中文在
jmeter里也是正常的显示的,无乱码。
至此,问题解决。