【已解决】一个关于web_reg_find函数检查中文乱码的问题(大家来研究下哈)
本帖最后由 ares444 于 2013-10-22 16:24 编辑背景:刚才在写新员工培训PPT的时候,我录制了个打开百度首页的脚本。其中,使用了web_reg_find函数来校验返回的响应中是否包含“百度”两个字
这里牵扯到一个字符集的问题。导致若是直接检测“百度”两个字会造成乱码,无法匹配
问题分析:
首先我登陆百度,查看了下百度首页的源文件,发现百度的字符集为: UTF-8
于是我在脚本里就使用lr_convert_string_encoding函数来转换字符集。
脚本如下:
Action()
{
lr_convert_string_encoding("百度",LR_ENC_SYSTEM_LOCALE,LR_ENC_UTF8,"str");
web_reg_find("Search=body",
"Text={str}",
LAST);
web_url("www.baidu.com",
"URL=http://www.baidu.com/",
"Resource=0",
"RecContentType=text/html",
"Referer=",
"Snapshot=t1.inf",
"Mode=HTML",
EXTRARES,
"Url=/img/i2.png", ENDITEM,
"Url=/img/arr.gif", ENDITEM,
"Url=/js/bdsug.js?v=1.0.3.0", ENDITEM,
"Url=/cache/hps/js/hps-1.0.js", ENDITEM,
LAST);
return 0;
}
但是,执行的结果报错:Action.c(10): Error -26366: "Text=鐧惧害" not found for web_reg_find
从报错信息里可以看出:百度两个字成功转成了UTF-8编码,为“鐧惧害”
于是,我修改了脚本,将检查点那段直接改成如下:
web_reg_find("Search=body",
"Text=鐧惧害",
LAST);
然后再次运行脚本,居然检查通过了。。
问题:
现在问题就来了。为什么我用变量就检查不通过,而直接把值写进来就检查通过了呢?我变量明明解析成功了啊。。。求高人指点 刚才咨询了位朋友。原来
lr_convert_string_encoding("百度",LR_ENC_SYSTEM_LOCALE,LR_ENC_UTF8,"str");
这个保存的str字段为:"str" ="鐧惧害\x00"
后面有个\x00
下面的问题就变成了。如何去掉\x00 好了问题解决了,为了去掉\x00,可以用这个方法:
lr_save_string(lr_eval_string("{str}"),"str");
下面是修改后的脚本:
Action()
{
//将“百度”两个字,转换成UTF-8格式
lr_convert_string_encoding("百度",LR_ENC_SYSTEM_LOCALE,LR_ENC_UTF8,"str");
//由于lr_convert_string_encoding的输出结果后面会多一个\X00,因此需要使用lr_save_string去掉\X00
lr_save_string(lr_eval_string("{str}"),"str");
web_reg_find("Search=body",
"Text={str}",
LAST);
web_url("www.baidu.com",
"URL=http://www.baidu.com/",
"Resource=0",
"RecContentType=text/html",
"Referer=",
"Snapshot=t1.inf",
"Mode=HTML",
EXTRARES,
"Url=/img/i2.png", ENDITEM,
"Url=/img/arr.gif", ENDITEM,
"Url=/js/bdsug.js?v=1.0.3.0", ENDITEM,
"Url=/cache/hps/js/hps-1.0.js", ENDITEM,
LAST);
return 0;
} 谢谢分享 受教了,谢谢分享
页:
[1]