Seite 1 von 1

Zeichensatz Probleme

Verfasst: Donnerstag 24. Mai 2007, 13:01
von de_master
Hi @ all,
ich habe folgendes Problem. Ich lese eine html Datei ein und parse diese mit Beautiful Soup. Nun habe ich Probleme mit den Zeichen :(.

In der Datei habe ich # -*- coding: utf-8 -*- drin stehen.

Ich öffne die Datei mit folgendem Befehl: f = codecs.open(filepath, "r", "utf-8")

Jedoch erhalte ich folgende Fehlermeldung:
Traceback (most recent call last):
File "C:\Dokumente und Einstellungen\Michael.Strecker\Desktop\code\HTMLinex.py", line 108, in <module>
test.getContent("test.htm", "Stamm (Menue)", "TestProjekt1")
File "C:\Dokumente und Einstellungen\Michael.Strecker\Desktop\code\HTMLinex.py", line 99, in getContent
c.execute(sql)
File "C:\Python25\lib\site-packages\MySQLdb\cursors.py", line 149, in execute
query = query.encode(charset)
UnicodeEncodeError: 'latin-1' codec can't encode character u'\u2026' in position 169: ordinal not in range(256)
Was mache ich denn noch falsch?

Gruss Michael

PS: Habe diesen Artikel gelesen: http://www.python-forum.de/topic-5095.html

Verfasst: Donnerstag 24. Mai 2007, 13:05
von de_master
Scheint wohl ein Datenbankproblem zu sein. Jedoch versteh ichs nicht so ganz :(.

Wär nice wenn mir jemand weiterhelfen könnte.

Gruss Michael

Verfasst: Donnerstag 24. Mai 2007, 13:13
von BlackJack
Die Datenbank will anscheinend Unicode nach 'Latin-1' kodieren um es zu speichern und in Deinen Daten ist ein Zeichen enthalten, dass sich nicht in 'Latin-1' darstellen lässt. Und zwar die "Auslassungspunkte":

Code: Alles auswählen

In [25]: unicodedata.name(u'\u2026')
Out[25]: 'HORIZONTAL ELLIPSIS'

In [26]: print u'\u2026'
…

Verfasst: Donnerstag 24. Mai 2007, 13:17
von de_master
BlackJack hat geschrieben:Die Datenbank will anscheinend Unicode nach 'Latin-1' kodieren um es zu speichern und in Deinen Daten ist ein Zeichen enthalten, dass sich nicht in 'Latin-1' darstellen lässt. Und zwar die "Auslassungspunkte":

Code: Alles auswählen

In [25]: unicodedata.name(u'\u2026')
Out[25]: 'HORIZONTAL ELLIPSIS'

In [26]: print u'\u2026'
…
Gibts die möglichkeit das der das trotzdem speichert? Mein Dokument ist an die 100 MB groß. Das alles durchzusuchen wird schwer :(.

Verfasst: Donnerstag 24. Mai 2007, 13:43
von jens
Benutzte nicht latin-1 beim MySQL Server, sondern UTF-8... Müste IMHO ab MySQL v4.1 gehen.

Das kann man auch mit MySQLdb umstellen.
Nimm die neuste Version von MySQLdb, denn da hat sich zwischenzeitlich was geändert. Siehe:
http://www.python-forum.de/topic-8002.html
oder
http://www.python-forum.de/topic-9425.html

Verfasst: Donnerstag 24. Mai 2007, 14:34
von de_master
Aktuelle Version 1.2.2 (MySQL-python-1.2.2.win32-py2.5.exe) habe ich installiert, jedoch die selbe Fehlermeldung.

Das Datenbankfeld habe ich als Typ "TEXT" mit der Kollation von "utf8_general_ci" gestellt. Ist das denn so richtig?

An was könnte es denn noch liegen?

Gruss Michael

Verfasst: Donnerstag 24. Mai 2007, 19:45
von Andy
Nicht verzagen, Wikipedia fragen: Auslassungspunkte#Darstellung_in_Computersystemen_und_Ersetzung :wink:

Gruss Andy

Verfasst: Donnerstag 24. Mai 2007, 19:58
von BlackJack
Das wird aber nicht allgemein helfen. Es können ja auch beliebige andere Zeichen vorkommen, die nicht mit 'latin-1' darstellbar sind.

Verfasst: Freitag 25. Mai 2007, 11:58
von jens
de_master hat geschrieben:An was könnte es denn noch liegen?
Du must beim connect auch sagen, das du UTF8 möchtest...

django macht es so: http://code.djangoproject.com/browser/d ... ql/base.py
beim connect werden die Parameter use_unicode=False und charset="utf8" mitgegeben. Geht aber wohl erst ab MySQLdb-1.2.1p2
Siehe auch http://www.python-forum.de/post-58386.html#58386