51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 2900|回复: 4
打印 上一主题 下一主题

[讨论] 【已解决】一个关于web_reg_find函数检查中文乱码的问题(大家来研究下哈)

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2013-10-22 15:54:53 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
本帖最后由 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  
[MsgId: MERR-26366]

从报错信息里可以看出:百度两个字成功转成了UTF-8编码,为“鐧惧害


于是,我修改了脚本,将检查点那段直接改成如下:
web_reg_find("Search=body",
                 "Text=鐧惧害",
                 LAST);
然后再次运行脚本,居然检查通过了。。




问题:
现在问题就来了。为什么我用变量就检查不通过,而直接把值写进来就检查通过了呢?我变量明明解析成功了啊。。。求高人指点
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
回复

使用道具 举报

该用户从未签到

5#
发表于 2013-10-23 17:52:15 | 只看该作者
受教了,谢谢分享
回复 支持 反对

使用道具 举报

该用户从未签到

4#
发表于 2013-10-23 09:40:27 | 只看该作者
谢谢分享
回复 支持 反对

使用道具 举报

该用户从未签到

3#
 楼主| 发表于 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;
}
回复 支持 反对

使用道具 举报

该用户从未签到

2#
 楼主| 发表于 2013-10-22 16:05:56 | 只看该作者
刚才咨询了位朋友。原来
lr_convert_string_encoding("百度",LR_ENC_SYSTEM_LOCALE,LR_ENC_UTF8,"str");
这个保存的str字段为:"str" =  "鐧惧害\x00"
后面有个\x00
下面的问题就变成了。如何去掉\x00
回复 支持 反对

使用道具 举报

本版积分规则

关闭

站长推荐上一条 /1 下一条

小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

GMT+8, 2024-11-26 11:02 , Processed in 0.068535 second(s), 28 queries .

Powered by Discuz! X3.2

© 2001-2024 Comsenz Inc.

快速回复 返回顶部 返回列表