UTF-8 und os.listdir ()

Ich habe ein bisschen Ärger mit einer Datei mit dem "ş" Charakter (das ist \xC8\x99 in UTF-8 – LATIN SMALL LETTER S MIT COMMA BELOW).

Ich ș.txt eine ș.txt Datei und versuche es wieder mit os.listdir() . Leider gibt os.listdir() es zurück als s\xCC\xA6 ("s" + COMBINING COMMA BELOW) und mein Testprogramm (unten) scheitert.

Dies geschieht auf meinem OS X, aber es funktioniert auf einem Linux-Rechner. Jede Idee, was genau dieses Verhalten verursacht (beide Umgebungen sind mit LANG = en_US.UTF8 konfiguriert)?

Hier ist das Testprogramm:

 #coding: utf-8 import os fname = "ș.txt" with open(fname, "w") as f: f.write("hi") files = os.listdir(".") print "fname: ", fname print "files: ", files if fname in files: print "found" else: print "not found" 

One Solution collect form web for “UTF-8 und os.listdir ()”

Das OS X Dateisystem verwendet meistens zerlegte Zeichen und nicht ihre kombinierte Form. Sie müssen die Dateinamen wieder normalisieren auf die NFC kombinierte normalisierte Form:

 import unicodedata files = [unicodedata.normalize('NFC', f) for f in os.listdir(u'.')] 

Dies verarbeitet Dateinamen als Unicode ; Sie müssten sonst den Bytestring zum Unicode zuerst entschlüsseln.

Siehe auch die unicodedata.normalize() Funktionsdokumentation .

  • Arbeiten mit UTF-8 in Python
  • Chinesisch Unicode Problem?
  • Türkische Zeichenkodierung
  • UnicodeDecodeError im PyCharm-Debugger
  • Unicode-String in Python drucken ungeachtet der Umgebung
  • Wie gibt man eine utf-8 String-Liste wie es in Python ist?
  • Konvertiere GBK in utf8 string in python
  • Python, scrapy: schlechtes utf8 Zeichen in Datei geschrieben von gekratzten HTML-Seite mit Zeichensatz iso-8859-1
  • Probleme beim Schreiben von gekratzten Daten in csv mit slawischen Zeichen (UnicodeEncodeError & TypeError)
  • Python Rückgängig Unicode Frage
  • Kodierungsfehler mit df.to_csv ()
  • Python ist die beste Programmiersprache der Welt.