ares444 发表于 2013-10-22 15:54:53

【已解决】一个关于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);
然后再次运行脚本,居然检查通过了。。




问题:
现在问题就来了。为什么我用变量就检查不通过,而直接把值写进来就检查通过了呢?我变量明明解析成功了啊。。。求高人指点

ares444 发表于 2013-10-22 16:05:56

刚才咨询了位朋友。原来
lr_convert_string_encoding("百度",LR_ENC_SYSTEM_LOCALE,LR_ENC_UTF8,"str");
这个保存的str字段为:"str" ="鐧惧害\x00"
后面有个\x00
下面的问题就变成了。如何去掉\x00

ares444 发表于 2013-10-22 16:20:20

好了问题解决了,为了去掉\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;
}

laicaiyan 发表于 2013-10-23 09:40:27

谢谢分享

tianlang001 发表于 2013-10-23 17:52:15

受教了,谢谢分享
页: [1]
查看完整版本: 【已解决】一个关于web_reg_find函数检查中文乱码的问题(大家来研究下哈)