UnicodeEncodeError

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Newbie2009
User
Beiträge: 12
Registriert: Mittwoch 15. Juli 2009, 11:55

Hallo Leute,

ich probiere schon seit Stunden den Fehler in meinem Quelltext zu finden, leider ohne Erfolg. Ich erhalte immer wieder folgende Fehlermeldung:

'ascii' codec can't encode character u'\xdf' in position 70: ordinal not in range(128)

Code: Alles auswählen

for products in Product.objects.all():
        category_path = ''
        category_utm = ''
   
        categories = products.get_categories()
		
        if len(categories) > 0 :
            category = categories[0]
			
            if category.slug in filter_category:    
                objects = []
                while category is not None:
                    objects.append(category)
                    category = category.parent
      
                for parent in objects:
                    category_path = category_path + '/' + str(parent.name.encode('utf-8'))
                    category_utm  = category_utm + '--' + str(parent.slug)
   
                #prices
                if products.for_sale == True :
                    price = products.for_sale_price
                else :
                    price = products.price

                #productdescription
                description = products.meta_description
                description = description.replace("\n", "")
                description = description.replace("\r", "")

                #deeplink
                product_path = ''
                deeplink = product_path + products.get_absolute_url()
				
                #image
                image_path = ''
                imagelink = image_path + products.get_image().url_200x200
   
                shipinfo = 'ab Lager'
				
                if products.is_product_with_variants():
                    bline = []
				
                elif products.is_variant():
                    vline = []
		   
                    #variant description
                    vdescription = products.get_meta_description()
                      
                    if vdescription != '' :
                        vdescription = vdescription.replace("\n", "")
                        vdescription = vdescription.replace("\r", "")
                        vdescription = vdescription.replace("%P", description)
                        description = vdescription 
		   
                    vline.extend([
                        products.id,
                        products.name.encode('utf-8'),
                        category_path.encode('utf-8'),
                        price,
                        deeplink,
                        '',
                        description.encode('utf-8'),
                        shipinfo,
                        0,
                        imagelink 
                    ])
                    if price > 0 :                 
                        writer.writerow(vline)
				
                elif products.is_standard():
                    line = []
		   
                    line.extend([
                        products.id,
                        products.name.encode('utf-8'),
                        category_path.encode('utf-8'),
                        price,
                        deeplink,
                        '',
                        description.encode('utf-8'),
                        shipinfo,
                        0,
                        imagelink 
                    ])
			
                    if price > 0 :                          
                        writer.writerow(line)

Könnt ihr mir weiterhelfen?
Benutzeravatar
mkesper
User
Beiträge: 919
Registriert: Montag 20. November 2006, 15:48
Wohnort: formerly known as mkallas
Kontaktdaten:

Es wäre noch interessant zu wissen, an welcher Stelle im Quellcode der Fehler auftritt.
Newbie2009
User
Beiträge: 12
Registriert: Mittwoch 15. Juli 2009, 11:55

In der Zeile: writer.writerow(vline) hier: 70

The string that could not be encoded/decoded was: n großen Sp
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Jetzt waer natuerlich noch hilfreich zu wissen, was denn ``writer`` ist und wie es erzeugt wird.
sma
User
Beiträge: 3018
Registriert: Montag 19. November 2007, 19:57
Wohnort: Kiel

\xDF ist ein ß in ISO-8859-1/15- bzw. CP1252-Kodierung bzw. der Unicode-Point dieses Zeichens. Einige Objekte in vline werden als Bytearrays im UTF-8-Format, andere direkt hinzugefügt. Ich vermute, dabei ist auch ein Byte-String oder Unicode-String mit so einem Zeichen.

Allgemein würde ich bei Python < 3 dazu raten, IMMER unicode-Strings zu benutzen, wenn man Strings meint und byte-Strings nur, wenn man wirklich Bytes hat. Encode macht aus einem String ein Bytearray, decode aus einem Bytearray einen String. Das gilt es zu beachten.

Stefan
Newbie2009
User
Beiträge: 12
Registriert: Mittwoch 15. Juli 2009, 11:55

Das Thema hat sich erledigt.

Da waren wohl noch Sachen im Cache. Ein Neustart hat das Problem gelöst.
Antworten