Seite 1 von 1

Win32 strings umwandeln?

Verfasst: Dienstag 20. Juli 2004, 21:06
von Flippo
Hallo,

mein Programm holt aus einer Datenbank (win32com, ADO) Recordsets ab und speichert sie. Ich möchte das Ergebnis unter Ausnutzung des neuen Moduls csv abspeichern, aber es kommt eine Fehlermeldung im Zusammenhang mit Umlauten ("not in ascii range" oder so).

Das Problem stellt sich auch bei gewöhnlichen Textdateien.

Wie kann ich diese Unicode strings umwandeln? Wenn ich Unicodestrings mittels print() ausgeben lasse, kann ich sie doch auch normal lesen.

Bei den Codesnippets findet sich etwas zur Umwandlung, aber das "händisch" zu erledigen kommt mir merkwürdig vor.

So ungefähr stelle ich mir das vor:
s = 'hallö'.encode() -> s = u'hall\xfe' (so ungefähr)

s.decode() -> 'hallö' [gibts nicht, aber wie macht mans??]

Verfasst: Dienstag 20. Juli 2004, 22:38
von Dookie
Hi Filippo,

Code: Alles auswählen

import sys

encoding = sys.getfilesystemencoding()

a = u"Hallö"
a = a.encode(encoding)
print encoding, repr(a)
a = a.encode("utf-8")
print "utf-8", repr(a)
a = a.encode("latin-1")
print "latin-1", repr(a)
Was kommt dabei raus bei Dir?


Gruß

Dookie

Verfasst: Mittwoch 21. Juli 2004, 06:16
von Milan
Bei mir nen Fehler, ich find den lustig... aus Unicode kann er es machen aber zurück zu Unicode geht nicht. :lol: :

Code: Alles auswählen

mbcs 'Hall\xf6'
Traceback (most recent call last):
  File "C:\Temp\test.py", line 8, in ?
    a = a.encode("utf-8")
UnicodeDecodeError: 'ascii' codec can't decode byte 0xf6 in position 4: ordinal not in range(128)

Verfasst: Mittwoch 21. Juli 2004, 12:29
von Dookie
Hi Milan,

ist gar nicht Lutig ;)
hab nur nen saublöden Fehler im Beispiel

Code: Alles auswählen

import sys

encoding = sys.getfilesystemencoding()

a = u"Hallö"
print encoding, repr(a.encode(encoding))
print "utf-8", repr(a.encode("utf-8"))
print "latin-1", repr(a.encode("latin-1"))
so wollte ich es eigentlich haben.


Gruß

Dookie