pipe.communicate的Python编码

pipe.communicate的Python编码,python,unicode,encoding,subprocess,popen,Python,Unicode,Encoding,Subprocess,Popen,我正在从Python2.6中的Python模块调用pipe.communicate。我从该代码中得到以下错误: from subprocess import Popen pipe = Popen(cwd) pipe.communicate( data ) 对于包含unicode(特别是0xE9)的任意cwd,其中数据: Exec。异常:“ascii”编解码器无法对位置507中的字符u'\xe9'进行编码:序号不在范围内(128) 回溯(最近一次呼叫最后一次): ... stdout,std

我正在从Python2.6中的Python模块调用
pipe.communicate
。我从该代码中得到以下错误:

from subprocess import Popen

pipe = Popen(cwd)

pipe.communicate( data )
对于包含unicode(特别是0xE9)的任意
cwd
,其中
数据

Exec。异常:“ascii”编解码器无法对位置507中的字符u'\xe9'进行编码:序号不在范围内(128)
回溯(最近一次呼叫最后一次):
... stdout,stderr=pipe.communicate(数据)
文件
“/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/subprocess.py”,
第671行,在通信中
返回自我。\u通信(输入)
文件
“/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/subprocess.py”,
第1177行,输入通信
bytes_write=os.write(self.stdin.fileno(),chunk)
我猜想,之所以会发生这种情况,是因为
pipe.communicate()
需要ASCII编码的字符串,而
data
是unicode

这就是我遇到的问题吗?我有一种方法可以将unicode传递到
pipe.communicate()

谢谢你的阅读

布莱恩

我可能通过改变以下方式解决了这个问题:

pipe.communicate( data )

尽管我会被纠正


布莱恩

没错。管道(以及文件、套接字等)传输字节,而不是Unicode(即“字符”)。您必须对Unicode编码才能传输它。谢谢!这修复了我使用Django时遇到的一个问题-我的一个表单通过子流程传递给外部处理器,Unicode提交一直失败,直到发生更改。您所说的“包含Unicode”是什么意思?具体来说,0xE9本身并不是任何通用编码中的有效Unicode代码点。
pipe.communicate( data.encode('utf8') )