Zeichensatz Probleme

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
de_master
User
Beiträge: 72
Registriert: Samstag 15. Januar 2005, 15:19

Donnerstag 24. Mai 2007, 13:01

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
de_master
User
Beiträge: 72
Registriert: Samstag 15. Januar 2005, 15:19

Donnerstag 24. Mai 2007, 13:05

Scheint wohl ein Datenbankproblem zu sein. Jedoch versteh ichs nicht so ganz :(.

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

Gruss Michael
BlackJack

Donnerstag 24. Mai 2007, 13:13

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'
…
de_master
User
Beiträge: 72
Registriert: Samstag 15. Januar 2005, 15:19

Donnerstag 24. Mai 2007, 13:17

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 :(.
Benutzeravatar
jens
Moderator
Beiträge: 8461
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Donnerstag 24. Mai 2007, 13:43

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

CMS in Python: http://www.pylucid.org
GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
de_master
User
Beiträge: 72
Registriert: Samstag 15. Januar 2005, 15:19

Donnerstag 24. Mai 2007, 14:34

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
Andy
User
Beiträge: 196
Registriert: Sonntag 1. Januar 2006, 20:12
Wohnort: aus dem hohen Norden....

Donnerstag 24. Mai 2007, 19:45

Nicht verzagen, Wikipedia fragen: Auslassungspunkte#Darstellung_in_Computersystemen_und_Ersetzung :wink:

Gruss Andy
BlackJack

Donnerstag 24. Mai 2007, 19:58

Das wird aber nicht allgemein helfen. Es können ja auch beliebige andere Zeichen vorkommen, die nicht mit 'latin-1' darstellbar sind.
Benutzeravatar
jens
Moderator
Beiträge: 8461
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Freitag 25. Mai 2007, 11:58

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

CMS in Python: http://www.pylucid.org
GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Antworten