2012-06-30 160 views
0

我抓取了一組網站並使用unicode編碼的字符提取了不同的字符串,例如'D \ xfcsseldorf中最佳吃的地方'。我把它們存儲在PostgreSQL數據庫中。當我檢索了從前面提到的數據庫,做字符串:unicode字符顯示不正確

name = string_retrieved_from_database 
print name 

輸出爲Unicode u'Best地方在d \ xfcsseldorf吃」。我想顯示字符串,因爲它應該是:'在杜塞爾多夫吃的最好的地方'。我怎樣才能做到這一點。

+0

從搜索網站中獲得的實際字節數是多少?很可能,你的錯誤是在那個時候引入的。 –

回答

3

你確定你得到輸出嗎當你打印變量,而不是交互式地顯示它?使用print時,你不應該得到u'...'顯示:

>>> x = b"Best places to eat in D\xfcsseldorf" 
>>> x.decode('latin-1') 
u'Best places to eat in D\xfcsseldorf' 
>>> print x.decode('latin-1') 
Best places to eat in Düsseldorf 

如果你在實際的字符串越來越反斜槓等等,那麼它可能出事了,在編碼階段(例如,文字反斜槓寫進入文字)。在這種情況下,您可能需要查看「unicode-escape」編解碼器:

>>> x = b"Best places to eat in D\\xfcsseldorf" 
>>> print x 
Best places to eat in D\xfcsseldorf 
>>> print x.decode('unicode-escape') 
Best places to eat in Düsseldorf 
+0

是的,實際上我的問題是沒有正確的處理直接將它們存儲到數據庫,x.decode('unicode-escape')像一個魅力工作。 – PepperoniPizza

3

您需要儘快處理編碼。最好的辦法是讀取HTML頁面,解碼你得到Unicode的字節串,然後將字符串作爲Unicode存儲在數據庫中,或者至少以UTF8的統一編碼存儲。

如果您需要幫助的詳細信息,Pragmatic Unicode, or, How Do I Stop The Pain有他們所有。