2008-09-18 27 views
10

我對Python標準庫(從3.0開始)基於unicode的標準庫的行爲有些困惑。諸如CGI和urllib這樣的模塊會使用unicode字符串,還是會使用新的「字節」類型並僅提供編碼數據?標準庫中的所有內容都將Python字符串視爲unicode嗎?

+0

也許這個問題不應該由同胞程序員回答,而是由Python開發者(間接最好;這裏瀏覽開發者的討論:http://mail.python.org/pipermail/python-3000/) – tzot 2008-09-18 09:31:42

回答

11

邏輯上的很多東西像MIME編碼的郵件,網址,XML文檔等,應返回bytes不是字符串。這可能導致有些驚愕的庫一開始就被確定下來的Python 3,人們發現,他們必須更加意識到bytes/string轉換比他們的str/unicode的...

6

一位偉大的關於這個問題(和Python一般)的事情是,你可以在解釋器中亂搞! Python 3.0 rc1 is currently available for download

>>> import urllib.request 
>>> fh = urllib.request.urlopen('http://www.python.org/') 
>>> print(type(fh.read(100))) 
<class 'bytes'> 
+0

我同意 - 今天早上我編譯並安裝了rc1,我已經花了太多時間在玩它了!我只是想知道是否有一個標準的規則,什麼是unicode,哪些不是。 – hacama 2008-09-18 10:26:18

1

這裏將有兩步舞。請參閱Python 3000 and You

第1步是讓3.0下運行。

第二步是重新考慮你的API來,也許,做一些更明智。

最可能的過程是庫將切換到unicode字符串以儘可能保持與他們以前的工作方式的兼容性。

然後,也許有些人會切換到字節更恰當地實現對各種協議的RFC標準。

相關問題