Jmeter 处理Unicode编码转为中文

对于接口中返回报文,有的接口返回信息是Unicode编码,写断言的时候,要么就Response Assertion就写成Unicode编码的断言,如下图:

真心不觉得返回报文加密能有多安全,别人将报文复制到

http://tool.chinaz.com/tools/unicode.aspx

站点,一查不就清楚了么,如下图:

秉承着学习的态度,我还是试了试Jmeter能否对响应报文中Unicode编码转中文。 

 

思想1: 用BeanShell PostProcessor将响应报文中Unicode编码直接转中文。

操作: Step1: 将请求中添加BeanShell后置处理器,张贴下面代码,保存。运行,返回信息如下。

Step2: 可能会遇到的问题:

1,中文显示????乱码怎么办? 修改jmeter.properties中默认编码格式为UTF-8,保存,重启Jmeter生效。

# The encoding to be used if none is provided (default ISO-8859-1)
sampleresult.default.encoding=UTF-8

2,没有转码为中文怎么办?  查看代码,看看Java中运行能否成功。

 

代码如下:

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());

  

posted @ 2019-01-02 14:40  巴黎爱工作  阅读(4245)  评论(1编辑  收藏  举报