2010-02-01 103 views

回答

10

正确的答案是:

p.communicate(b"insert into egg values ('egg');"); 

注意龙头B,告诉你,这是个字节的字符串,而不是字符串unicode字符。此外,如果您是从文件中读取这样的:

value = open('thefile', 'rt').read() 
p.communicate(value); 

的变化,为:

value = open('thefile', 'rb').read() 
p.communicate(value); 

同样要注意 'B'。 现在,如果你的value是一个字符串,你可以从一个只返回字符串的API中获取,不管如何,然后你需要对它进行编码。

p.communicate(value.encode('latin-1'); 

Latin-1,因为它不像ASCII,它支持所有的256字节。但是,这表示,在unicode中使用二进制数据会造成麻烦。如果你能从一开始就把它变成二进制,那会更好。

5

你可以用encode方法将其转换为字节:

>>> "insert into egg values ('egg');".encode('ascii') # ascii is just an example 
b"insert into egg values ('egg');" 
+0

答案的扩展:在Python 3中,所有字符串都是Unicode,并且在转移到应用程序时可能需要编码,以便应用程序能够理解。这就是ascii的用途。 – extraneon 2010-02-01 12:28:17

+2

@extraneon:是的,所有字符串都是Python 3中的unicode。这就是为什么你不使用字符串来保存应该传输的数据,而是使用字节。因此,如果从一开始就将数据保持在正确的格式,那么编码大多是不必要的。 – 2010-02-01 14:40:22

相关问题