python2.7 - Lesen eines Wörterbuchs aus einer mit Unicode durchsuchten TXT-Datei

  • Ich habe mich vor einiger Zeit für einen Chinese Studies-Kurs eingeschrieben, und ich dachte, es wäre eine großartige Übung für mich, ein Flashcard-Programm in Python zu schreiben. Ich speichere die Flash-Kartenlisten in einem Wörterbuch in einer .txt-Datei, bisher ohne Probleme. Die wirklichen Probleme treten ein, wenn ich versuche, die in utf-8 kodierte Datei in mein Programm zu laden. Ein Auszug meines Codes:

     import codecs
    
    f = codecs.open(('list.txt'),'r','utf-8')
    quiz_list = eval(f.read())
    
    quizy = str(quiz_list).encode('utf-8')
    
    print quizy
     

    Nun, wenn zum Beispiel list.txt besteht aus:

     {'character1':'男人'}
     

    Was tatsächlich gedruckt wird, ist

     {'character1': '\xe7\x94\xb7\xe7\x86\xb1'}
     

    Offensichtlich gibt es hier einige schwerwiegende Codierungsprobleme, aber ich kann nicht verstehen, wo diese Probleme auftreten. Ich arbeite mit einem Terminal, das utf-8 unterstützt, also nicht die standardmäßige cmd.exe: Dies ist nicht das Problem. Wenn Sie eine normale list.txt ohne die geschwungenen Dict-Bits lesen, werden die chinesischen Zeichen ohne Probleme zurückgegeben. Ich schätze also, dass ich den Wörterbuchteil nicht richtig handle. Alle Gedanken wären sehr dankbar!

    22 November 2011
    user1058744
2 answers
  • Ihre Kodierung stimmt nicht ... Sehen Sie sich Folgendes an:

     >>> d = {1:'男人'}
    >>> d[1]
    '\xe7\x94\xb7\xe4\xba\xba'
    >>> print d[1]
    男人
      

    Eine Sache ist das Drucken einer Unicode-Zeichenfolge, eine andere druckt ihre Darstellung.

    22 November 2011
    macfrank
  • str(quizy) ruft repr(quizy['character1']) auf, wodurch eine ASCII-Darstellung des Zeichenfolgenwerts erzeugt wird. Wenn Sie nur print quizy['character1'] sehen, werden die Zeichencodes Unicode in der Python-Zeichenfolge sein.

    22 November 2011
    ephemient