2010-02-01 74 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

相關問題