2011-09-22 286 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

相关问题