2013-01-13 51 views
1

我正在編寫一個程序,該程序可以提取和編輯維基百科上的文章,並且在處理Unicode字符前綴\ u時遇到一些麻煩。我已經試過.encode(「utf8」),並且這似乎不是在這裏做的。如何正確編碼這些以\ u爲前綴的值以發佈到維基百科?有關我的問題,請參閱this edit。 下面是一些代碼:之前我發佈的頁面Python - 在HTTP POST請求中發送unicode字符(前綴爲 u)

url = "http://en.wikipedia.org/w/api.php?action=query&format=json&titles="+urllib.quote(name)+"&prop=revisions&rvprop=content" 
articleContent = ClientCookie.urlopen(url).read().split('"*":"')[1].split('"}')[0].replace("\\n", "\n").decode("utf-8") 

data = dict([(key, value.encode('utf8')) for key, value in data.iteritems()]) 
data["text"] = data["text"].replace("\\", "") 
editInfo = urllib2.Request("http://en.wikipedia.org/w/api.php", urllib.urlencode(data)) 
+1

我們希望看到一些代碼。 – georg

+0

我會在一秒鐘內添加一些。 –

+0

我希望看到一些示例數據;您將'u2013'作爲文本文本(5個字符)發佈,它看起來並不像您首先有一個'\ u2013'碼點(*一個*字符)。 –

回答

2

您正在下載JSON數據而不解碼 讓頁面。使用json library爲:

import json 

articleContent = ClientCookie.urlopen(url) 
data = json.load(articleContent) 

JSON編碼的數據看起來很像的Python,它採用\u逃避爲好,但它實際上是JavaScript的一個子集。

data變量現在擁有深厚的數據結構。由字符串分割來看,你想這件作品:

articleContent = data['query']['pages'].values()[0]['revisions'][0]['*'] 

現在 articleContent是一個實際的unicode()實例;它是您正在尋找的頁面的修訂版本:

>>> print u'\n'.join(data['query']['pages'].values()[0]['revisions'][0]['*'].splitlines()[:20]) 
{{For|the game|100 Bullets (video game)}} 
{{GOCEeffort}} 
{{italic title}} 
{{Supercbbox <!--Wikipedia:WikiProject Comics--> 
| title =100 Bullets 
| image =100Bullets vol1.jpg 
| caption = Cover to ''100 Bullets'' vol. 1 "First Shot, Last Call". Cover art by Dave Johnson. 
| schedule = Monthly 
| format = 
|complete=y 
|Crime  = y 
| publisher = [[Vertigo (DC Comics)|Vertigo]] 
| date = August [[1999 in comics|1999]] – April [[2009 in comics|2009]] 
| issues = 100 
| main_char_team = [[Agent Graves]] <br/> [[Mr. Shepherd]] <br/> The Minutemen <br/> [[List of characters in 100 Bullets#Dizzy Cordova (also known as "The Girl")|Dizzy Cordova]] <br/> [[List of characters in 100 Bullets#Loop Hughes (also known as "The Boy")|Loop Hughes]] 
| writers = [[Brian Azzarello]] 
| artists = [[Eduardo Risso]]<br>Dave Johnson 
| pencillers = 
| inkers = 
| colorists = Grant Goleash<br>[[Patricia Mulvihill]] 
+0

謝謝 - 工作和unicode字符正確顯示在文本框中。 –