Seite 1 von 1

Verfasst: Donnerstag 11. Januar 2007, 08:26
von alpha
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

Verfasst: Donnerstag 11. Januar 2007, 10:00
von 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'

Verfasst: Mittwoch 31. Januar 2007, 13:23
von nevyn
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')