windows löschen - UnicodeDecodeError: Der 'charmap' Codec kann das Byte X in der Position Y nicht dekodieren: das Zeichen wird auf <undefiniert> abgebildet





für mp3 (3)


Die fragliche Datei verwendet nicht die CP1252 Codierung. Es benutzt eine andere Kodierung. Welchen musst du selbst herausfinden? Übliche sind Latin-1 und UTF-8 . Da 0x90 in Latin-1 eigentlich nichts bedeutet, ist UTF-8 (wobei 0x90 ein Fortsetzungsbyte ist) wahrscheinlicher.

Sie geben die Codierung beim Öffnen der Datei an:

file = open(filename, encoding="utf8")

Ich versuche, ein Python 3-Programm zu bekommen, um einige Manipulationen mit einer Textdatei auszuführen, die mit Informationen gefüllt ist. Beim Versuch, die Datei zu lesen, erhalte ich den folgenden Fehler:

Traceback (most recent call last):
File "SCRIPT LOCATION", line NUMBER, in <module>
text = file.read()
File "C:\Python31\lib\encodings\cp1252.py", line 23, in decode
return codecs.charmap_decode(input,self.errors,decoding_table)[0]
UnicodeDecodeError: 'charmap' codec can't decode byte 0x90 in position 2907500: character   maps to <undefined>

Wenn mir jemand helfen könnte, um dieses Problem zu überwinden, wäre ich sehr dankbar.




Als Erweiterung von @LennartRebebro antworten Sie:

Wenn Sie nicht wissen, welche Kodierung es ist, funktioniert obige Lösung nicht (es ist nicht utf8 ) und Sie haben sich selbst nur erraten - es gibt Online-Tools , mit denen Sie identifizieren könnten, welche Kodierung das ist. Sie sind nicht perfekt, aber funktionieren normalerweise gut. Nachdem Sie die Codierung erkannt haben, sollten Sie die obige Lösung verwenden können.

EDIT: (Von Kommentar kopiert)

Ein ziemlich populärer Texteditor Sublime Text hat einen Befehl, um die Kodierung anzuzeigen, wenn sie eingestellt wurde ...

  1. Gehe zu View -> Show Console (oder Strg + ` )

  1. view.encoding() unten in das Feld view.encoding() und hoffe auf das Beste (ich konnte nichts außer Undefined bekommen, aber vielleicht hast du mehr Glück ...)




Jeffrey Richter schrieb in seinem Buchauszug, dass eine Callback-Methode mit dem ResolveAssembly-Ereignis der Anwendungsdomäne registriert werden kann, damit die CLR während der Programminitialisierung Assemblys und DLL-Dateien von Drittanbietern finden kann:

AppDomain.CurrentDomain.AssemblyResolve += (sender, 
  args) => {
    String resourceName = "AssemblyLoadingAndReflection." +
    new AssemblyName(args.Name).Name + ".dll";
    using (var stream =       
      Assembly.GetExecutingAssembly().GetManifestResourceStream(resourceName)){
        Byte[] assemblyData = new Byte[stream.Length];
        stream.Read(assemblyData, 0, assemblyData.Length);
        return Assembly.Load(assemblyData);
      }
   };

Disclaimer : Ich habe das selbst nicht benutzt. Soweit ich verstanden habe, muss der Client das .NET Framework installiert haben.







windows python-3.x unicode file-io decode