故事背景

飞测群里有同学,又提了一个乱码的问题—request请求提的乱码。各种配置修改,都不能解决。乱码现象如下图:

解决思路

1、修改本地配置文件

因为此处的数据,还没有发送出去,所以,肯定是这个变量的编码和jmeter内部的一些编码不一致导致。然后,尝试修改jmeter.properties的配置项:

`sampleresult.default.encoding=utf-8`

重启jmeter后,依然还是乱码。

2、修改消息头和请求体编码

同时把消息头和请求体的编码修改为utf-8,结果依然不生效。

3、查看jmeter源码

<1>因为是request请求体的内容,所有先在下面的包中进行查看:

org.apache.jmeter.visualizers

然后看到一个java的接口文件:

RequestView.java

<2>这个接口中有一个下面的方法:

 JPanel getPanel();

通过eclipse,找到实现这个接口的函数(右键->Quick Type Hierarchy查找)。搜索到如下2个文件:

RequestViewRaw.java
RequestViewHTTP.java

<3>因为乱码是在http视图先出现的,Raw并没有出现,所以推测应该在RequestViewHTTP.java文件中可以找到线索。大致阅读了下源码,找到如下内容:

public static String decodeQuery(String query) {if (query != null && query.length() > 0) {try {query = URLDecoder.decode(query, CHARSET_DECODE); // better ISO-8859-1 than UTF-8} catch(IllegalArgumentException e) {log.warn("Error decoding query, maybe your request parameters should be encoded:" + query, e);return null;} catch (UnsupportedEncodingException uee) {log.warn("Error decoding query, maybe your request parameters should be encoded:" + query, uee);return null;} return query;}return null;}

其中下面一句是关键:

query = URLDecoder.decode(query, CHARSET_DECODE); // better ISO-8859-1 than UTF-8

对请求体的内容进行了url编码。于是,检查常量CHARSET_DECODE的值。如下:

private static final String CHARSET_DECODE = "ISO-8859-1"; //$NON-NLS-1$

因为之前的尝试步骤中,把所有的配置都修改为了UTF-8,那么,是不是因为这个地方的编码为ISO-8859-1,不一致,所致?尝试修改配置如下:

private static final String CHARSET_DECODE = "UTF-8"; //$NON-NLS-1$

重新编译。执行jmeter。成功!截图如下:

发散一下

为什么jmeter的开发人员留下如此的注释:

better ISO-8859-1 than UTF-8 (好奇)

搜索后的理解:

1、ISO-8859-1(Latin-1),单字节编码,是一种8位字符集,占位少。
2、ISO-8859-1能够满足所有的欧洲语言(开发者是个用欧洲语言的人呗)。

那UTF-8是什么呢:

1、亚洲和非洲语言并不能被8位字符集所支持,只有用2个字节,才可以编码地球上几乎所有地区的文字,因此,创建了UNICODE编码。
2、UNICODE比ASCII占用大一倍的空间,而对ASCII来说高字节的0对他毫无用处,应运而生了新的编码形式–UTF(Unicode Transformation Format)
3、UTF-8:每次8个位传输数据,它是一种变长的编码方式。当字符在ASCII 码的范围时,就用一个字节表示,保留了ASCII字符一个字节的编码做为它的一部分,注意的是unicode一个中文字符占2个字节,而UTF-8一个中 文字符占3个字节。(此点,不是很清楚)

jmeter乱码request请求体乱码相关推荐

  1. Spring拦截器获取request请求体中的json数据,并转换成Java对象的解决办法

    1.要被拦截的Controller接口 我们需要一个更新用户信息接口,请求方式为POST,参数类型为对象类型(UserInfo),代码如下: @Resource private UserService ...

  2. 微信小程序系列-wx.request 请求中文乱码问题

    method: "post",header: {'content-type': 'application/x-www-form-urlencoded;charset=utf-8', ...

  3. jmeter对乱码如何处理_JMeter中文乱码的解决

    对于JMeter中文乱码分为两部分: 1.请求(request):由于引用了csv文件当csv文件编码与JMeter不统一可能造成服务器收到数据的中文乱码 2.返回(response):由于服务器返回 ...

  4. Request(请求继承体系,获取请求行,请求头,请求体和通用的获取请求数据和解决乱码问题)

    Request(请求继承体系,获取请求行,请求头,请求体和通用的获取请求数据和解决乱码问题) 1.Request(请求) Request继承体系 要想了解RequestFacade中都提供了哪些方法, ...

  5. 解决为什么已经设置了request.setCharacterEncoding(“utf-8“);POST请求仍然乱码的问题

    解决为什么已经设置了request.setCharacterEncoding("utf-8");POST请求仍然乱码的问题 参考文章: (1)解决为什么已经设置了request.s ...

  6. 返回结果乱码_Spring请求参数和响应结果全局加密和解密(1)

    阅读文本大概需要25分钟. 前提 前段时间在做一个对外的网关项目,涉及到加密和解密模块,这里详细分析解决方案和适用的场景.为了模拟真实的交互场景,先定制一下整个交互流程.第三方传输(包括请求和响应)数 ...

  7. 解决Post请求中文乱码问题

    Web应用的中文乱码由来 1.Tomcat默认使用字符集ISO-8859-1,属于西欧字体集 2.解决乱码的核心思路是将ISO-8859-1转换为UTF-8 3.Servlet中求请与响应都需要设置U ...

  8. postman 返回json乱码_POSTMAN发起请求收到乱码 http 406错误

    web前段异常: The resource identified by this request is only capable of generating responses with charac ...

  9. java get post乱码处理_JavaWeb 之 GET请求和POST请求的乱码问题

    一.乱码的原因 乱码:当编码与解码不一致时,就会出现乱码的情况.(本质:编解码不一致) 根据乱码又可分为: (1)请求乱码:客户端编码与服务器解码不一致 (2)响应乱码:服务器编码与客户端解码不一致 ...

最新文章

  1. python拆分excel的sheet为单文件_python拆分Excel表格并发送邮件
  2. 从15000个Python开源项目中精选的Top30,Github平均star为3707,赶紧收藏!
  3. Lock wait timeout exceeded; try restarting......
  4. Java并发编程:深入剖析ThreadLocal
  5. 浏览器html5/css3兼容性检测的javascript类库 - Modernizr简单介绍
  6. 获取Executor提交的并发执行的任务返回结果的两种方式/ExecutorCompletionService使用...
  7. hiernate的锁机制
  8. 【C语言进阶深度学习记录】二十五 指针与数组的本质分析二
  9. mysql数据库访问编程,mysql 连接数据库
  10. Android Shape工具 Duck
  11. 本体学习的概念及目标
  12. Python爬虫编程实践 Task02
  13. 如何实现不同vlan,不同网关的终端间的通信
  14. hdu 5919 主席树保留区间数的种类数目
  15. Oracle安装基本步骤
  16. 搞深度学习框架的那帮人,不是疯子,就是骗子
  17. 系统集成项目管理工程师(中级)考试心得经验
  18. 【JAVA】根据汉字拼音首字母排序 不同类型处理
  19. NC 一些常用方法总结
  20. xml根据属性去重。如csprj去重

热门文章

  1. 动脑学院 java_动脑学院Rxjava预习资料 Rxjava入门
  2. 苹果手机如何隐藏软件_不一样的手机APP隐藏软件,隐藏你的小秘密!
  3. Linux命令之ethtool命令
  4. MindMaster 快捷键
  5. AbdomenCT-1K(2)
  6. JS获取、设置、移除元素属性的操作
  7. java五子棋棋盘_Java系列——五子棋的实现
  8. PFC离散元与3DEC离散元数值模拟
  9. setuptools打包安装工具的使用
  10. friso官方网站下载及官方信息