Win32 strings umwandeln?

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
Flippo
User
Beiträge: 1
Registriert: Dienstag 20. Juli 2004, 20:57

Dienstag 20. Juli 2004, 21:06

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??]
Dookie
Python-Forum Veteran
Beiträge: 2010
Registriert: Freitag 11. Oktober 2002, 18:00
Wohnort: Salzburg
Kontaktdaten:

Dienstag 20. Juli 2004, 22:38

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
[code]#!/usr/bin/env python
import this[/code]
Milan
User
Beiträge: 1078
Registriert: Mittwoch 16. Oktober 2002, 20:52

Mittwoch 21. Juli 2004, 06:16

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)
Dookie
Python-Forum Veteran
Beiträge: 2010
Registriert: Freitag 11. Oktober 2002, 18:00
Wohnort: Salzburg
Kontaktdaten:

Mittwoch 21. Juli 2004, 12:29

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
[code]#!/usr/bin/env python
import this[/code]
Antworten