Encoding Fehler bei Exceltabelle auslesen

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
alpha
User
Beiträge: 195
Registriert: Freitag 23. Mai 2003, 23:24
Wohnort: Ulm

Hallo nochmal,

jetzt hab ich leider noch ein weiteres mir unerklärliches Problem.
erst mal mein kleines Progrämmchen:

Code: Alles auswählen

# -*- coding: iso-8859-1 -*-

import win32com.client
import string

MyApp = win32com.client.Dispatch("Excel.Application")
MyWorkbook = MyApp.Workbooks.Open("c:/temp/Legende_HMI_CANtrol.xls")
MyWorkSheet = MyWorkbook.Worksheets("Legende_HMI_CANtrol")

tabelle = []
spalte = 0
while True:
    spalte += 1
    print spalte
    wert = MyWorkSheet.Cells(1,spalte).Text
    print type(wert)
    print wert
    
  
    if wert == "":
        break
    tabelle.append(wert)
   
print tabelle
Und hier die Ausgabe:

Microsoft Windows XP [Version 5.1.2600]
(C) Copyright 1985-2001 Microsoft Corp.

N:\scripts\Python>excellesen.py
1
<type 'unicode'>
OPC-Item
2
<type 'unicode'>
Einheit
3
<type 'unicode'>
Beschreibung
deutsch / englisch
4
<type 'unicode'>
Bemerkungen deutsch / englisch
5
<type 'unicode'>
Beschreibung
deutsch
6
<type 'unicode'>
Bemerkungen deutsch
7
<type 'unicode'>
Beschreibung
englisch
8
<type 'unicode'>
Bemerkungen englisch
9
<type 'unicode'>
Beschreibung
französisch
10
<type 'unicode'>
Bemerkungen französisch
11
<type 'unicode'>
Beschreibung
spanisch
12
<type 'unicode'>
Bemerkungen spanisch
13
<type 'unicode'>
Beschreibung
xxxxx
14
<type 'unicode'>
Bemerkungen xxxxx
15
<type 'unicode'>

[u'OPC-Item', u'Einheit', u'Beschreibung\ndeutsch / englisch', u'Bemerkungen deu
tsch / englisch', u'Beschreibung\ndeutsch', u'Bemerkungen deutsch', u'Beschreibu
ng\nenglisch', u'Bemerkungen englisch', u'Beschreibung\nfranz\xf6sisch', u'Bemer
kungen franz\xf6sisch', u'Beschreibung\nspanisch', u'Bemerkungen spanisch', u'Be
schreibung\nxxxxx', u'Bemerkungen xxxxx']

N:\scripts\Python>

Und nun meine Frage:
"Bemerkungen französisch" wird im Unicode String richtig gespeichert und ausgegeben, wieso wird es dann in der Liste "tabelle" falsch gespeichert? Ich hab keine Erklärung dafür. Hab schon die ganzen encodings vorher darüber laufen lassen, ohne Erfolg. Hat jemand von euch ne Idee?

Danke fürs helfen.

alpha
BlackJack

alpha hat geschrieben:[u'OPC-Item', u'Einheit', u'Beschreibung\ndeutsch / englisch', u'Bemerkungen deu
tsch / englisch', u'Beschreibung\ndeutsch', u'Bemerkungen deutsch', u'Beschreibu
ng\nenglisch', u'Bemerkungen englisch', u'Beschreibung\nfranz\xf6sisch', u'Bemer
kungen franz\xf6sisch', u'Beschreibung\nspanisch', u'Bemerkungen spanisch', u'Be
schreibung\nxxxxx', u'Bemerkungen xxxxx']

N:\scripts\Python>

Und nun meine Frage:
"Bemerkungen französisch" wird im Unicode String richtig gespeichert und ausgegeben, wieso wird es dann in der Liste "tabelle" falsch gespeichert?
Der wird in der Liste nicht "falsch" gespeichert. Er wird dort nur so ausgegeben, dass man ihn bei (fast) jeder Kodierung lesen kann, indem alles, was nicht ASCII ist, als Escapesequenz dargestellt wird.

Code: Alles auswählen

In [2]: print u'franz\xf6sisch'
französisch

In [3]: print repr(u'franz\xf6sisch')
u'franz\xf6sisch'
nevyn
User
Beiträge: 1
Registriert: Mittwoch 27. September 2006, 10:15
Wohnort: Hannover

Der Code hakt:

Code: Alles auswählen

retval = excel_sheet.Range("A1").Value
print "Original:", repr(retval)
retval = unicode(retval)
utf8_string = retval.encode("utf-8")
print "Unicode:", repr(retval)
print "UTF8:", repr(utf8_string)
Sollten Sonderzeichen wie Umlaute in retval sein, läuft es auf einen Fehler hinaus. unicode benötigt einen encoding-Schlüssel. Z.B.

Code: Alles auswählen

retval = unicode(retval,'cp1252')
Antworten