我知道每個人都厭倦了編碼問題,但我無法弄清楚這一點。Python搞砸了斯堪的納維亞字符(Ö - >Ã)
我從Python中的XML文件(API)獲取數據。一切都很好,但是當我打印包含斯堪的納維亞的字符,如Ö
或Ä
價值觀,他們搞的一團糟:
Ö -> Ã
Ä -> ä
的XML文檔是UTF-8編碼。
這是我的代碼。抱歉給你帶來不便。
# Get the data
from urllib2 import urlopen
ur = urlopen("http://www.leffatykki.com/xml/leffat")
data = ur.read()
# Replace ampersands (triggers an error)
data = data.replace('&', '&')
# Loop XML
from lxml import etree
from cStringIO import StringIO
def fast_iter(context, func):
for event, elem in context:
func(elem)
elem.clear()
while elem.getprevious() is not None:
del elem.getparent()[0]
del context
def process_element(elem):
try:
name = elem.xpath('name/text()')[0]
year = elem.xpath('year/text()')[0]
print name
except IndexError:
temp = '...'
context = etree.iterparse(StringIO(data), tag='movie')
fast_iter(context, process_element)
哦,但從結果的外觀來看,只需打印出UTF-8的字節表示即可。 – schlenk 2012-03-27 19:14:17
「許多」是有點滑稽。 stdlib有一些衆所周知的問題,有些人知道如何使用外部軟件包。 – 2012-03-27 19:16:14
我已經添加了我的完整代碼,謝謝你們的幫助。 – 2012-03-27 19:27:43