码迷,mamicode.com
首页 > 其他好文 > 详细

Loadrunner中对中文进行UTF-8转码

时间:2015-08-31 17:38:19      阅读:472      评论:0      收藏:0      [点我收藏+]

标签:

由于目前很多服务器采用的都是 UTF-8 编码方式,而Loadrunner脚本中使用的编码方式为GBK,如果直接将中文作为参数传给服务器,则会由于编码不一致导致报错。因此需要对脚本中的中文进行转码。

 

       方法:使用lr_convert_string_encoding函数转码

       例如将需要将“张三”作为参数传递,脚本如下:

      lr_convert_string_encoding( "张三",       //原参数值

            LR_ENC_SYSTEM_LOCALE,              //原编码方式

            LR_ENC_UTF8,                                //目标编码方式

            "zs" );                                            //编码转换后的参数值

 

       转码完成后,就可以使用 {zs} 将“张三”传给服务器了。

 

但是!

       当我以为这样就万事大吉的时候,被Loadrunner当头一棒打得有点蒙:转换编码以后的字符串最后一定会带有 \x00 这几个字符。这样显然会导致传值不正确。

       经过几番折腾确认这是Loadrunner的一个问题,不管是Loadrunner9.5还是比较新的Loadrunner11都会有这个问题。查看Loadrunner中关于lr_convert_string_encoding函数说明中标红的说明:The function saves the result string, including its terminating NULL, in the parameterparamName。也就是说,当转换编码为UTF-8之后,如果直接作为变量传值的话,在最后的字符串之中,会多出来一个“NULL”,在C语言中NULL是一个字符串的结束,而正是这个NULL字节的存在导致出错。

 

        为了解决这个问题不得已又学了一招,脚本如下:

      char tmp1[50];                    //注意:Loadrunner中定义变量要在脚本最开始

 

 

      strcpy(tmp1,lr_eval_string("{zs}"));        //将zs的值取出并拷贝给tmp1,前提是要在脚本最初定义好tmp1,即 char tmp1[50]

      lr_log_message("str is %s",tmp1);         //在回放日志中打印tmp1的值以便查看、非必要 

 

      lr_save_string(tmp1,"tmp2");                //将tmp1的值传给tmp2

 

       这段脚本是利用lr_eval_string函数取参数值时会自动去掉\x00。这样处理过后传值给服务器的时候就要使用{tmp2},而不再是{zs}。经过测试,结果正确。


Loadrunner中对中文进行UTF-8转码

标签:

原文地址:http://my.oschina.net/u/2448801/blog/499680

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!