2016-03-26 2 views
-2

Ich habe diesen Fehler ziemlich konsequent bei dem Versuch, Asian-Zeichen in eine Datei zu schreiben - ich kann die Zeichen in IDLE (aber nicht in der Befehlszeile) gut drucken, aber wenn ich versuche, sie in eine Datei zu schreiben, erhalte ich diese Fehlermeldung:UnicodeEncodeError beim Schreiben asiatischer Zeichen in eine Datei

Traceback (most recent call last): 
    File "C:\Users\Tai\Desktop\Development\playlistcreator\main.py", line 21, in <module> 
    playlistcreator.addtoplaylist(list_of_paths,"C:\\Users\\Tai\\Desktop\\New Music\\testplaylist.m3u8") 
    File "C:\Users\Tai\Desktop\Development\playlistcreator\playlistcreator.py", line 74, in addtoplaylist 
    playlistFile.write(track + '\n') 
    File "C:\Users\Tai\AppData\Local\Programs\Python\Python35-32\lib\encodings\cp1252.py", line 19, in encode 
    return codecs.charmap_encode(input,self.errors,encoding_table)[0] 
UnicodeEncodeError: 'charmap' codec can't encode characters in position 56-57: character maps to <undefined> 

ich denken verstehen, was der Fehler ist: im Grunde kann es keine asiatischen Zeichen machen, damit es nicht in eine Datei schreiben kann - Aber wenn ich sie in IDLE drucken kann, warum kann sie dann nicht in eine Datei geschrieben werden? Gibt es eine Möglichkeit, dies zu umgehen?

(Ich bin nicht sicher, ob der Code erforderlich ist, um den Fehler zu verstehen, aber ich werde es trotzdem schreiben)

def addtoplaylist(paths, playlist_path): 
    # Open file (or create if it does not exist) 
    #change to given directory 
    try: 
     os.chdir(os.path.dirname(paths)) 
    except Exception as err: 
     print(err) 
    #open file - if it does not exist, create it 
    with open(os.path.basename(playlist_path), 'a+') as playlistFile: 
     for track in paths: 
      playlistFile.write(track + '\n') 
    playlistFile.close() 

Antwort

0

Sie benötigen die Codierung für die Datei angeben, wenn es zum Beispiel zu öffnen:

with open(os.path.basename(playlist_path), 'a+', encoding='UTF-8') as playlistFile: 

Ansonsten Python defaults Konsole Codierung (ANSI) für Dateien zu verwenden, in diesem Fall CP 1252, die der Windows-Name ist für erweitertes Latein-1.

+0

Das funktionierte wie ein Zauber, vielen Dank! –

-1

Sie benötigen eine Codierung geeignet für die Charaktere zu verwenden.

playlistFile.write(track.encode(encoding=some_encoding) + '\n') 

Ich denke, some_encode = 'utf-8' tun wird, aber nicht wirklich sicher.

Vielleicht IDLE verwendet standardmäßig eine andere Codierung und deshalb funktioniert es dort.

+0

Ich versuchte es und bekam einen anderen Fehler (wenn auch einen anderen): 'playlistFile.write (track.encode (encoding =" utf-8 ") + '\ n') TypeError: concat Bytes nicht zu str ' –

+0

Ich habe es geschafft, es zu beheben, indem ich die Zeichenfolge ein Byte-Literal, aber jetzt habe ich wieder den gleichen Fehler mit einem anderen Satz von Zeichen - ich muss wahrscheinlich die Codierung wieder ändern - aber danke, dass Sie mich auf dem richtigen Weg! –

+0

@ Taim. Sie verwenden Python 3, gilt dieser Ratschlag nur für Python 2 –