2011-09-22 179 views
2

我有以下形式編碼的字符串:La + Cit%C3%A9 + De + la + West我存儲在Python中的SQLite VARCHAR字段中。將url編碼的字符串轉換爲python unicode字符串

這些顯然是UTF-8編碼的二進制字符串轉換爲urlencoded字符串。 問題是如何將其轉換回一個Unicode字符串。 s ='La + Cit%C3%A9 + De + la + West'

我使用了urllib.unquote_plus(s)python函數,但它不會將%C3%A9轉換爲unicode字符。我看到這個'LaCitéde la West'而不是預期的'LaCitéDe la West'。

我在Ubuntu上運行我的代碼,而不是Windows,編碼是UTF-8。

回答

5

正如我們所討論的,它看起來像問題在於你是從一個unicode對象開始的,而不是一個字符串。你想要一個字符串:

>>> import urllib 
>>> s1 = u'La+Cit%C3%A9+De+la+West' 
>>> type(s1) 
<type 'unicode'> 
>>> print urllib.unquote_plus(s1) 
La Cité De la West 

>>> s2 = str(s1) 
>>> type(s2) 
<type 'str'> 
>>> print urllib.unquote_plus(s2) 
La Cité De la West 

>>> import sys 
>>> sys.stdout.encoding 
'UTF-8' 
+0

你的例子對我來說工作方式是一樣的。這是否是從VARCHAR字段的SQLite數據庫中提取字符串的事實? – chmike

+0

類型以您的示例返回str。隨着s = u「La + Cit%C3%A9 + De + la + West」,類型(s)返回unicode並打印unquote_plus(s) 返回'LaCitéde la West'。問題因此是s的初始類型。使用print unquote_plus(str(s))解決了我的問題。 ! – chmike

+0

如果你更新你的答案,我會給你答案。 – chmike

相關問題