python子进程调用casperjs中文乱码
来源:互联网 发布:剑灵大地力士卡刀数据 编辑:程序博客网 时间:2024/05/17 04:48
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
背景:
win7-64 python2.7 casperjs1.3beta phantomjs2.0.0
问题现象:在python中用subprocess调用cmd执行casperjs,返回的内容中文乱码
解决过程:
乱码问题很蛋疼,特别是涉及到字节流在代码中穿过来穿过去那种,把每一次in和out都看做过一道门的话,那在每一道门都有可能出问题,然后需要你在那么多道们中找到出问题的那一个。。。
1)简化问题
先撇开subprocess的调用,直接在cmd窗口中分别调用phantom 和casperjs来获取页面内容
多次实验证明phantom在cmd下没问题(显示是乱码,但转码为utf-8的时候正常),而casperjs则会出现乱码(显示是乱 码,但转码为utf-8的时候还存在乱码字符)
找到一篇文章http://mushanblog.com/blog/study-note-of-casperjs
按照里面的修改,casperjs在cmd窗口输出正常了
修改项:
1.把cmd编码改为utf-8 命令-----CHCP 65001
2.修改窗口属性,改变字体在命令行标题栏上点击右键,选择"属性"->"字体",将字体修改为True Type字体"Lucida
Console",然后点击确定将属性应用到当前窗口。
2)再结合subprocess(popen的stdout设置为PIPE)
我觉得cmd的属性配置应该是全局的吧,因为我打开不同个cmd窗口可以看出配置都一样了。但用subprocess的popen调用还 是乱码。然后我就想那就用popen来改下cmd的编码吧,测试后成功了。
具体代码:
subprocess.Popen(["cmd", "/c", """chcp 65001"""]) #新加部分 proc = subprocess.Popen(["cmd", "/c", ………………#具体业务代码
最后,还有几个问题请教下路过的大神们
1)为什么修改了cmd的编码方式,但通过管道通信的时候还需要再设置一次。。。
2)这个popen的PIPE通信具体是怎么回事,比如我调用的是cmd程序,那所有发到cmd显示的内容都当做PIPE的输入?
像网上一些通信例子,都是直接自己显示申请的PIPE然后一端写,一端读。。。那其他的这种调用第三方程序这一类 的,他是怎么确定第三方程序的返回值的(比如有些程序是把数据直接写入内存然后返回0或1的状态吗),然后再打入 到popen的stdout指定的管道(不知道我说明白了没有)?
- python子进程调用casperjs中文乱码
- 解决casperjs脚本输出中文乱码问题
- python 使用 subprocess.Popen() 调用子进程
- python操作子进程,调用其他程序
- Python Module_subprocess_子进程(程序调用)
- python调用子进程实例,来自cherrypy-cgiserver
- Python调用MySQLdb插入中文乱码的问题
- Python调用MySQLdb插入中文乱码的问题
- c++ 调用 python 函数中文返回值乱码
- JS调用中文乱码
- python 子进程subprocess
- python创建子进程
- Python mysql 中文乱码
- python中文乱码问题
- Python中文乱码
- python 中文乱码
- python 中文乱码解决
- python中文乱码问题
- js 函数定义的三种方式以及匿名的自执行函数定义方式和常见的错误写法
- Implement strStr()--LeetCode
- 版本控制的策划书
- matlab中ezplot和plot, fplot这3
- JAVA组件使用---UUID使用方法
- python子进程调用casperjs中文乱码
- java语言实现顺序表
- ZOJ3331---Process the Tasks(dp)
- python 实践程序1——实现binaryproto文件到npy文件的转化
- 优先队列的一种使用方法 bjfuoj1310
- Aspose.Email.Imap 使用
- So Easy!7个立竿见影的EDM转化方法
- C++继承关系中Data Member和Functions Member的内存布局(基于C++ Object Model描述)
- 服务器开发之六 对Makefile文件进行抽象