jmeter响应结果中汉字为unicode编码怎么转为正常汉字

文章目录

前言

本人在做一个网站的接口测试,发现某一个接口返回的多个结果中,有的是 unicode 编码的,这样汉字就是类似\u8fd9这种形式,但是有的结果又是正常的汉字,目前还不知道为什么是这样的,但是现在有个需求就是要使用 jmeter 中正则提取器去匹配其中的字段,由于有的汉字显示了,有的汉字没法显示出来(显示的是 unicode 编码),因此数据没法使用正则去提取,提取的不全

解决思路

先通过一段代码将请求响应中的 unicode 编码转变为 utf-8 即将 unicode 编码的汉字可以正常显示出来

我们在请求中添加后置 beanshell 处理控件

在这里插入图片描述

其中写上代码:

String s=new String(prev.getResponseData(),"UTF-8");
char aChar;
int len= s.length();
StringBuffer outBuffer=new StringBuffer(len);
for(int x =0; x <len;){
   aChar= s.charAt(x++);
   if(aChar=='\\'){
       aChar= s.charAt(x++);
       if(aChar=='u'){
           int value =0;
           for(int i=0;i<4;i++){
               aChar= s.charAt(x++);
               switch(aChar){
                   case'0':
                   case'1':
                   case'2':
                   case'3':
                   case'4':
                   case'5':
                   case'6':
                   case'7':
                   case'8':
                   case'9':
                       value=(value <<4)+aChar-'0';
                       break;
                   case'a':
                   case'b':
                   case'c':
                   case'd':
                   case'e':
                   case'f':
                       value=(value <<4)+10+aChar-'a';
                       break;
                   case'A':
                   case'B':
                   case'C':
                   case'D':
                   case'E':
                   case'F':
                       value=(value <<4)+10+aChar-'A';
                       break;
                   default:
                       throw new IllegalArgumentException(
                               "Malformed   \\uxxxx  encoding.");}}
           outBuffer.append((char) value);}else{
           if(aChar=='t')
               aChar='\t';
           else if(aChar=='r')
           aChar='\r';
           else if(aChar=='n')
           aChar='\n';
           else if(aChar=='f')
           aChar='\f';
           outBuffer.append(aChar);}}else
       outBuffer.append(aChar);}
prev.setResponseData(outBuffer.toString());

本人使用亲测是没有问题的,大致思路就是通过 beanshell 中的内置变量 prev 拿到请求响应数据,然后将 unicode 转化之后,重新设置修改 prev 请求响应数据即可,因为以后的操作会拿 prev 改动后的请求响应数据

后序写正则,写其他请求都是 ok,正则匹配也能成功了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

abcnull

您的打赏是我创作的动力之一

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值