Seite 1 von 1

Encode Hilfe bei Umlauten

Verfasst: Mittwoch 6. Februar 2019, 19:06
von bst2k
Hallo zusammen,

ich bin jetzt seit einigen Stunden am verzweifeln.. Es geht um folgenden Code:

Code: Alles auswählen

#!/usr/bin/python
# -*- coding: utf-8 -*-

import requests
from bs4 import BeautifulSoup
import datetime
import os, sys

....

    for div in divs:
        l= div.find("div", attrs={"class" : location"}).text
        s = div.find("div", attrs={"id" : "street"}).text
        c = div.find("div", attrs={"id" : "city"}).text


        f.write(str(l) + ";" + str(s) + ";" + str(c))
        
....

Dieser Code funktioniert auf meinem Lokalen Windows PC ohne Probleme und auch die Darstellung der Umlaute funktioniert.

Wenn ich den Code auf meinem Raspberry laufen lasse, bekomme ich den Fehler:
UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position
Wenn ich den Code jetzt wie folgt anpasse ...

Code: Alles auswählen

#!/usr/bin/python
# -*- coding: utf-8 -*-

import requests
from bs4 import BeautifulSoup
import datetime
import os, sys

....

    for div in divs:
        l= div.find("div", attrs={"class" : location"}).text
        s = div.find("div", attrs={"id" : "street"}).text
        c = div.find("div", attrs={"id" : "city"}).text
        
        local= l.encode('ascii', 'replace')
        street = s.encode('ascii', 'replace')
        city = c.encode('ascii', 'replace')


        f.write(str(local) + ";" + str(street ) + ";" + str(city ))
        
....
.. läuft zwar alles wunderbar durch, aber die Umlaute werden mit einem ? ersetzt. Mir ist klar, dass dafür replace verantwortlich ist, aber ohne stürzt der Code auch wieder ab. Ersetze ich ASCII durch UTF8 beim encoden, bekomme ich wieder den Fehler
UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position
Kann mir hier bitte jemand helfen?

Danke & Gruß

Re: Encode Hilfe bei Umlauten

Verfasst: Mittwoch 6. Februar 2019, 19:24
von Sirius3
Die entscheidenden Stellen fehlen, nämlich die, wo f (übrigens ein sehr schlechter Variablenname, weil einbuchstabige gar nichts aussagen) definiert wird, bzw. die Information, dass Du unter Windows Python3 benutzt und unter Raspian Python2.

Beim Öffnen der Datei gibst Du am besten immer ein encoding an, für Python2 io.open.
Wenn Du csv-Dateien schreiben willst, benutze unicodecsv. Beachte den Fall, dass ; in einem der Felder vorkommen könnte.

Re: Encode Hilfe bei Umlauten

Verfasst: Mittwoch 6. Februar 2019, 19:45
von bst2k
Hallo Sirius,

Danke für deine schnelle Antwort.

In dem Code öffne ich die CSv wie folgt:

Code: Alles auswählen

filename = 'Locations.csv'
f = open(filename, "a")

Re: Encode Hilfe bei Umlauten

Verfasst: Mittwoch 6. Februar 2019, 20:04
von Sirius3
Und die Lösungen habe ich auch schon geschrieben.