Mal unabhängig davon, ob mein Editor die Files korrekt anzeigt, hat sich ein neues Problem aufgetan, dessen Ursache (und Lösung) mir nach stundenlangen Recherchen im Netz nicht klar wurde:
Ich habe also diese UTF-8 Files. Wenn ich deren Inhalt in eine mySQL Datenbank einlesen will, kriege ich folgende Fehlermeldung:
Code: Alles auswählen
(Heizen/Kühlen)
Traceback (most recent call last):
File "sql_processes.py", line 54, in ?
sql_fill_wortliste()
File "sql_processes.py", line 29, in sql_fill_wortliste
sql_write_word(wort, ID, cursor)
File "sql_processes.py", line 8, in sql_write_word
output = cursor.execute("""insert into wortliste_d (id, wort, x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, vorkommen) values (%s, '%s', %s, %s, %s
, %s, %s, %s, %s, %s, %s, %s, '%s')""" % (ID, word, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, foo))
File "d:\python23\lib\site-packages\MySQLdb\cursors.py", line 95, in execute
return self._execute(query, args)
File "d:\python23\lib\site-packages\MySQLdb\cursors.py", line 114, in _execute
self.errorhandler(self, exc, value)
File "d:\python23\lib\site-packages\MySQLdb\connections.py", line 33, in defaulterrorhandler
raise errorclass, errorvalue
UnicodeEncodeError: 'ascii' codec can't encode character u'\xfc' in position 107: ordinal not in range(128)
Man muss dabei noch anmerken, dass zum Beispiel das Zeichen ü in emacs als ü angezeigt wird. Das gleiche gilt für alle anderen Umlaute und das Grad (°) Zeichen.
Ändere ich ü in ü usw. (das dann auch in WordpadMFC und emacs so angezeigt wird, wenn ich die Datei abspeichere und neu öffne, erzeugt das Script folgende Fehlermeldung:
Code: Alles auswählen
Traceback (most recent call last):
File "sql_processes.py", line 54, in ?
sql_fill_wortliste()
File "sql_processes.py", line 31, in sql_fill_wortliste
wort = infile.readline()
File "d:\python23\lib\codecs.py", line 384, in readline
return self.reader.readline(size)
File "d:\python23\lib\codecs.py", line 295, in readline
return self.decode(line, self.errors)[0]
UnicodeDecodeError: 'utf8' codec can't decode bytes in position 9-14: unsupported Unicode code range
Wo liegt das Problem? In der Datenbank (die übrigens unter UTF-8 läuft) oder Python. Wie kann ich das Problem beheben?
Quelltext:
Code: Alles auswählen
def sql_write_word(word, ID, cursor):
foo = "leer"
output = cursor.execute("""insert into wortliste_d (id, wort, x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, vorkommen) values (%s, '%s', %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, '%s')""" % (ID, word, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, foo))
print output
def sql_fill_wortliste():
print "Bitte geben Sie Datei an:"
infile_name = raw_input()
infile = codecs.open(infile_name, "r", "utf-8")
ID = 1
print ID
wort = infile.readline()
conn = MySQLdb.connect(db="niklaus", user="mael")
cursor = conn.cursor()
while wort:
sql_write_word(wort, ID, cursor)
ID = ID + 1
wort = infile.readline()
print ID
print wort
print "Ende"
conn.close()
infile.close()