免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 4293 | 回复: 6
打印 上一主题 下一主题

[网络相关] expect send 中文乱码 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-09-20 11:21 |只看该作者 |倒序浏览
我用expect脚本send中文的时候,会将数据double一份,我的脚本如下:
package require Expect
log_file -noappend "D:/tmp/exp.log"
spawn telnet 10.153.88.30
expect "login:"
send "wds\r"
expect "word:"
send "wdswds\r"
expect "$"
send "总\r"
expect "$"

经过我分析"总"这个字网络编码应该是\327\334

我单独起telnet进程发送"总"正常,网络编码为\327\334

然而通过expect send 出去抓包得到的数据却便问\327\327\334\334,相当于把数据double了一份

我测试了一下跟telnet没有关系,自己最编写了各exe,将数据打印出来,发现同样问题,讲中文double了一份

这个问题直接导致数据出错,请各位大虾指点指点。

论坛徽章:
2
白羊座
日期:2013-11-18 19:52:42辰龙
日期:2014-09-07 07:46:06
2 [报告]
发表于 2012-09-20 14:20 |只看该作者
用什么工具telnet,看样子是telnet设置问题

论坛徽章:
0
3 [报告]
发表于 2012-09-20 14:31 |只看该作者
回复 2# damcool


    windows自带的telnet 和plink的telnet都是有这种问题的
跟telnet没关系的,自己编写一个exe,这个exe只是简单的将输入的数据打印出来,然后spawn这个exe,发现也是将数据double了

论坛徽章:
2
白羊座
日期:2013-11-18 19:52:42辰龙
日期:2014-09-07 07:46:06
4 [报告]
发表于 2012-09-20 14:39 |只看该作者
sixteenth_hj 发表于 2012-09-20 14:31
回复 2# damcool

求exe源代码

论坛徽章:
0
5 [报告]
发表于 2012-09-27 17:24 |只看该作者
回复 4# damcool

int main()
{
        while(1)
        {
                char a;
                a=getch();
                cout<<(int)a<<endl;
        }


        return 0;
}
输入“总”,这个进程应该打印-41,-36
而再expect中spawn这个进程 打印的是 -41,-41,-36,-36


   

论坛徽章:
0
6 [报告]
发表于 2012-10-31 15:14 |只看该作者
补充:
     我的操作系统是win7
       经过我测试,在windows操作系统下会出现这种情况,而在linux下却完全正常!求指点啊
谁来回答我的问题呀?

论坛徽章:
0
7 [报告]
发表于 2013-01-10 15:16 |只看该作者
本帖最后由 sixteenth_hj 于 2013-01-10 15:16 编辑

问题得以解决
原因是expect将数据传给windows的console时,是将数据以keydown和keyup事件传了两次,而windows的console只能识别ascii码,而将非ascii码
当做两次数据处理,因此出现以上错误
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP