lr_convert_string_encoding
Converts a string to a different encoding.
C Language
intlr_convert_string_encoding( const char *sourceString, const char *fromEncoding, const char *toEncoding, const char *paramName);
Example See Also
sourceString
|
The string to convert
|
fromEncoding
|
The encoding of the sourceString
|
toEncoding
|
The encoding to convert of the string saved in parameterparamName
|
paramName
|
The name of the parameter in which the destination string will be saved
|
lr_convert_string_encodingconverts a string encoding between the following encodings: System locale, Unicode, and UTF-8.The function saves the result string, including its terminating NULL, in the parameterparamName.
lr_convert_string_encodingis added manually to a script. when needed. It is not recorded.
Possible values for ‘fromEncoding‘ and ‘toEncoding‘ :
Constant
|
Value
|
LR_ENC_SYSTEM_LOCALE
|
NULL
|
LR_ENC_UTF8
|
"utf-8"
|
LR_ENC_UNICODE
|
"ucs-2"
|
根据函数说明,我们编写测试脚本如下
lr_convert_string_encoding( "环球影院",
LR_ENC_SYSTEM_LOCALE,
LR_ENC_UTF8,
"str" );
web_custom_request("web_custom_request",
"URL=http://172.16.4.191/list?id={str}",
"Method=GET",
"TargetFrame=",
"Resource=0",
"Referer=",
"EncType=text/xml;charset=UTF-8",
"Body=",
LAST);
使用lr_convert_string_encoding函数,将中文转换成UTF-8编码以后,作为参数传递给请求,并发送。
测试结果:仍然返回404错误,查看loadrunner日志信息“环球影院”已经正确转换成UTF8编码方式,那为什么还是请求失败呢?
Action.c(7): t=825ms: 223-byte request headers for "
http://172.16.4.191/list?id=鐜悆褰遍櫌" (RelFrameId=1)
Action.c(7): GET /list?id=鐜悆褰遍櫌\x00 HTTP/1.1\r\n
Action.c(7): Content-Type: text/xml;charset=UTF-8\r\n
Action.c(7): User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows)\r\n
Action.c(7): Accept-Encoding: gzip, deflate\r\n
Action.c(7): Accept: */*\r\n
Action.c(7): Connection: Keep-Alive\r\n
Action.c(7): Host: 172.16.4.191\r\n
Action.c(7): \r\n
发现在请求地址“/list?id=鐜悆褰遍櫌”后面还带了一个\x00,这正是lr_convert_string_encoding函数说明中标红的说明:The function saves the result string, including its terminating NULL, in the parameterparamName.
也就是说,我转换成UTF-8之后,如果直接作为变量传到代码之中的话,在最后的字符串之中,会多出来一个“NULL”,在C语言中NULL是一个字符串的结束,而正是这个null字节的存在导致了服务端识别id出错。
实践三:
char tmp[50];
lr_convert_string_encoding( "环球影院",
LR_ENC_SYSTEM_LOCALE,
LR_ENC_UTF8,
"str" );
strcpy(tmp,lr_eval_string("{str}"));
lr_log_message("str is %s",tmp);
lr_save_string(tmp,"sorvalue");
web_custom_request("web_custom_request",
"URL=http://172.16.4.191/list?id={sorvalue}",
"Method=GET",
"TargetFrame=",
"Resource=0",
"Referer=",
"Body=",
LAST);
通过lr_eval_string函数取参数值时会自动去掉\x00,测试结果正常,正确返回HTTP响应内容。