2011-12-06 97 views
0

因此,我正在爲我的客戶端的Web瀏覽器類型的應用程序工作,並且我剛剛實現了書籤功能,但它無法按預期工作。當用戶點擊「書籤頁面」時,會彈出一個小表單,該表單會將網頁的標題放入一個行編輯中。問題是,如果網站在標題中包含一些外來或不尋常的符號,那麼Python會拋出一個錯誤,不能對字符串進行編碼。我怎麼能讓python處理所有可能的字符串,不管它是否有象形文字或其他奇怪的符號?使用Python 2.6和unicode

庫GUI和嵌入式瀏覽器:PyQt的

你在使用解析網站
+2

如果沒有代碼,它的難以猜測,特別是因爲您的標題已經顯示您知道解決方案正在使用unicode ... – mac

+0

我試過unicode(web.title(),「utf-8」),但後來得到一個錯誤,我無法存儲字節碼在sqlite中。 –

回答

0

?我會推薦Beautiful Soup。它會嘗試並確定網頁的編碼並返回unicode。 Beautiful Soup's Parsing HTML section。編輯:也看看「美麗的湯給你的Unicode,該死」部分

+0

我使用PyQT的QWebView來顯示網站並從中獲取所需的數據。 –

+0

好的,我無法進一步幫助,因爲我對PyQT沒有任何經驗。如果您無法找到使用QWebView執行此操作的方法,則可以將此作爲最後的手段並單獨獲取頁面,但@ ekhumoro的解決方案似乎更合適 – jjwchoy

1

如果你使用QWebView.title獲得當前網頁的標題,那麼它將返回QString或Python的Unicode串。你得到哪一個取決於正在使用的PyQt API版本。對於版本1(這是Python2的默認設置),它將是QString;對於版本2(這是Python3的默認版本),它將是一個python unicode字符串。無論是爲了在該行編輯正確顯示它,只是把它直接:

lineEdit.setText(webview.title()) 

既然你似乎是使用Python2,我假設webview.title()返回一個QString。如果你想將其轉換爲一個Python的Unicode字符串(例如,爲了使用SQLite使用它),那麼你就可以做到以下幾點:

title = unicode(webview.title()) 

請注意,您應該經過編碼(如「 utf-8「)作爲unicode的第二個參數,因爲這用於解碼字節字符串到unicode字符串。

如果需要從QString得到一個 「UTF-8」 編碼的字節字符串,那麼你可以這樣做:

data = unicode(webview.title()).encode('utf-8') 

或:

data = webview.title().toUtf8().data()