Ich kann einfach nicht herausfinden! :( Mir Verschrottung von Daten aus einem utf-8-codierten Ort, gut, dass zumindest ist das, was es sagt:python und scrapy DAS Kodierungsproblem
Content-Type: text/html;charset=utf-8
Ich erhalte eine Liste der regelmäßigen Unicode-Strings mit XPath-Auswahl extract() Aufruf:
item['city']= element.select('//div[@id="bubble_2"]/div/text()').extract()
Dies ist die Liste:
[u'Westbahnhofstr.\xa010', u'72070\xa0T\xfcbingen']
Jetzt werde ich Mitglied der Liste in eine Unicode-String:
item['city']= "".join(element.select('//div[@id="bubble_2"]/div/text()').extract())
So weit so gut:
u'Beim Nonnenhaus\xa0672070\xa0T\xfcbingen'
Das Problem erscheint, während ich die Ausgabe dieses Unicode-String entweder auf Bildschirm (Druck) oder in eine Datei (schreiben) versuchen. was auch immer ich versuche, es gibt einen Fehler zurück (http://pastebin.com/51DkX2R2):
exceptions.UnicodeEncodeError: 'ascii' codec can't encode character u'\xa0' in position 11: ordinal not in range(128)
I Unicode-Byte-String codiert haben vor der Ausgabe natürlich:
item['city'].encode('utf-8')
Das ist mein pipeline.py ist und wie ich zu öffnen und schreiben Sie an meine cvs:
import csv
import items
import urlparse
import codecs
class DepostPipeline(object):
def __init__(self):
self.modelsCsv = csv.writer(codecs.open('Dees.csv', mode='w',encoding='utf-8'))
self.modelsCsv.writerow(['city'])
def process_item(self, item, spider):
if isinstance(item, items.DetailsItem):
item['city'] = item['city'].encode('utf-8')
self.modelsCsv.writerow([item['city']])
return item
Das seltsame ist, dass mein System (python auf Windows) Unicode-Strings perfekt Griffe:
C:\Console2>python
Python 2.7.6 (default, Nov 10 2013, 19:24:18) [MSC v.1500 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> s=u'Beim Nonnenhaus\xa0672070\xa0T\xfcbingen'
>>> print s
Beim Nonnenhaus 672070 Tübingen
Ich habe in den letzten 10 Tagen viel über utf-8, Unicode, Kodierung und Dekodierung gelesen, aber es scheint, dass ich hier noch etwas vermisse ?! Ich freue mich über jede Hilfe oder Beratung.
Sorry, irgendwie habe ich das von meinem Code verpasst haben, es schon an Ort und Stelle war ... Ich bin der Bearbeitung meiner Post. Danke für die Antwort. – mrki
Komplettes Fehlerprotokoll: http://pastebin.com/51DkX2R2 – mrki
@mrki: Recht, das ist, weil Sie 'codecs.open()' verwenden; Das habe ich vermisst. Für das nächste Mal wäre es sehr hilfreich, das Traceback in Ihrer Frage zu verwenden! :-) –