[Code] [Python] UnicodeEncodeError

Dieses Thema im Forum "Programmierung & Entwicklung" wurde erstellt von unix, 1. September 2011 .

Schlagworte:
  1. 1. September 2011
    [Python] UnicodeEncodeError

    Huhu,

    Folgendes Problem:

    Ich lese eine Datei per

    Code:
     filehandle = io.open(datei, "r")
     s = filehandle.read()
     print type(s) # ergibt <type 'unicode'>
    
    aus, die sowohl Bytedaten, als auch Text enthält.



    So ich verwerte sowohl die Bytedaten, als auch den Text, jedoch gibts beim Text Probleme mit Umlauten!

    Zuerst verarbeite ich die Bytedaten aus der Datei ohne Probleme, danach lese ich die Strings aus und da knallts dann:

    So verarbeite ich die Strings:

    Code:
    # -*- coding: iso-8859-1 -*-
    ...
    formatter = "{0:<11}{1:<9}{2:<14}{3:<14}{4:<8}"
    Meldungen += (formatter.format("", "", "", "", meldung[index1:index1 + laenge] + "\n"))
    ...
    
    In der Zeile in der Meldungen erweitert wird knallts dann sobald in meldung[index1:index1 + laenge] ein Umlaut drin ist.

    Ich hab schon mit decode und encode rumgespielt, aber das einzige was sich verändert hatte war, dass es auch in der eclipse Konsole nicht richtig angezeigt wurde!

    Ansonsten funzt in der eclipse console alles toll, aber wenns ichs dann mit der Windows "Konsole" aufrufe kommt der Fehler:
    Hab schon das Zeug von der Seite hier durch probiert, jedoch hat nichts geholfen
    http://wiki.python.de/Von%20Umlauten,%20Unicode%20und%20Encodings
    Hat einer ne Idee?

    EDIT:

    Python 2.7 wird verwendet
     
  2. 1. September 2011
    AW: [Python] UnicodeEncodeError

    Hilft Dir das?
    Code:
    >>> a = u"Hallo RaidRush"
    >>> a
    u'Hallo RaidRush'
    >>> type(a)
    <type 'unicode'>
    >>> b = a.encode('latin1')
    >>> b
    'Hallo RaidRush'
    >>> type(b)
    <type 'str'>
    
    EDIT: Wait.. da gabs ein "force" flag oder so fuer .encode, wenn es nicht im ASCII/latin1 gibt..ich suche

    EDIT: Gefunden:
    Code:
    
    >>> a = u'\uc39f'
    >>> a
    u'\uc39f'
    >>> a.encode('latin1')
    Traceback (most recent call last):
     File "<stdin>", line 1, in <module>
    UnicodeEncodeError: 'latin-1' codec can't encode character u'\uc39f' in position 0: ordinal not in range(256)
    >>> 
    >>> a.encode('latin1','ignore')
    ''
    
     
  3. 2. September 2011
    AW: [Python] UnicodeEncodeError

    Wenn mit type(meldung) unicode ausgibt, wieso kommt dann als Fehler "ascii" codec...?

    So hab was neues herausgefunden:

    Wenn ich mit zwei Typen arbeite funktioniert es, aber leider nicht korrekt:

    Einmal die Variable string mit dem eingelesenen Inhalt von der Datei in unicode
    und dann mach ich noch ein
    meldung = string.encode('latin1','ignore')

    das Teil hat dann den Typ str.

    ABER: Ich kann nicht in string nach den Indexen einiger Werte suchen und diese dann in meldung benutzen, weil die beiden wegen dem ignore flag verschiedene Größen haben!

    Also da gehen einige Bytes verloren wegen dem ignore!
     
  4. Video Script

    Videos zum Themenbereich

    * gefundene Videos auf YouTube, anhand der Überschrift.