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

Zeichensatz Probleme

Beitragvon de_master » 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

Beitragvon de_master » 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

Beitragvon 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

Beitragvon de_master » 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: 8458
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Beitragvon jens » 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

Beitragvon de_master » 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....

Beitragvon Andy » Donnerstag 24. Mai 2007, 19:45

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

Gruss Andy
BlackJack

Beitragvon 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: 8458
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Beitragvon jens » 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

Wer ist online?

Mitglieder in diesem Forum: martinjo, WhiteyW