Behandeln Sie Zip-Dateien mit japanischen Dateinamen in Python 3

Neuere Spezifikationen ermöglichen es ZIP-Dateien, Dateinamen in UTF-8 zu speichern. In vielen Fällen wird jedoch der ältere umgebungsabhängige Zeichencode zum Speichern der Dateinamen verwendet. Im Falle von Japanisch wird Shift-JIS (cp932) laut Windows häufig verwendet.

In Python 2 war der vom zipfile-Modul zurückgegebene Dateiname eine Bytezeichenfolge, sodass der Dateiname von cp932 unverändert zurückgegeben wurde. In Python 3 wurde die Zeichenfolge jedoch mit Unicode vereinheitlicht. Wenn die Zip-Datei gelesen wird, wird der Dateiname dekodiert. Es wird als Zeichenfolge zurückgegeben. Natürlich sind japanische Bräuche nicht das Standardverhalten, daher werden die Zeichen so wie sie sind verstümmelt.

Als ich das Python 3.4-Zipfile-Modul las, sah es so aus:

            if flags & 0x800:
                # UTF-8 file names extension
                filename = filename.decode('utf-8')
            else:
                # Historical ZIP filename encoding
                filename = filename.decode('cp437')

Würde beim Dekodieren einer cp932-codierten Zeichenfolge kein UnicodeDecodeError auftreten?

>>> len(bytes(range(256)).decode('cp437'))
256

cp437 scheint alle Bytes eins zu eins pro Zeichen zu dekodieren. Es scheint also gut, mit cp437 neu zu codieren und dann erneut mit cp932 zu decodieren.

import zipfile
zf = zipfile.ZipFile('foo.zip')
for name in zf.namelist():
    print(name.encode('cp437').decode('cp932')

Recommended Posts

Behandeln Sie Zip-Dateien mit japanischen Dateinamen in Python 3
Extrahieren Sie Zip-Dateien rekursiv mit Python
Behandeln Sie Excel-CSV-Dateien mit Python
Lesen Sie Dateien parallel zu Python
Umgang mit Japanisch mit Python
[Python] Holen Sie sich die Dateien mit Python in den Ordner
Beheben Sie den japanischen Schreibfehler UnicodeEncodeError in der Python-Datei
Behandle Excel mit Python
Behandle Rabbimq mit Python
Erstellen Sie ein Bild mit Zeichen mit Python (Japanisch)
Zeichenkodierung beim Umgang mit Dateien in Python 3
Markdown mit Python behandeln
Japanische Ausgabe mit Python
Zip mit Python extrahieren (unterstützt japanische Dateinamen)
[Python] Umgang mit japanischen Zeichen mit openCV
Konvertieren Sie das Bild in .zip mit Python in PDF
Japanische Ausgabe beim Umgang mit Python im Visual Studio
Behandeln Sie Umgebungsdaten in Python
Senden Sie japanische Post mit Python3
Ich habe Python auf Japanisch geschrieben
Schaben mit Selen in Python
Betreiben Sie LibreOffice mit Python
Schaben mit Chromedriver in Python
Debuggen mit pdb in Python
Behandeln Sie Umgebungsvariablen in Python
Umgang mit Sounds in Python
Sortieren von Bilddateien mit Python (2)
Scraping mit Selen in Python
Sortieren Sie große Dateien mit Python
Sortieren von Bilddateien mit Python (3)
Scraping mit Tor in Python
[Tipps] Behandle Athena mit Python
Tweet mit Bild in Python
Bilddateien mit Python sortieren
Kombiniert mit Ordnungszahl in Python
Japanische morphologische Analyse mit Python
Integrieren Sie PDF-Dateien in Python
TXT-Dateien mit Python lesen
Ich verstehe Python auf Japanisch!
Arbeiten mit JSON-Dateien in Matlab
Behandeln Sie komplexe Zahlen in Python
Holen Sie sich japanische Synonyme mit Python
[R] [Python] Memo zum Lesen mehrerer CSV-Dateien in mehreren Zip-Dateien
Stellen Sie die umgekehrte Geokodierung auf Japanisch mit der Python Google Maps-API bereit
Zahlenerkennung in Bildern mit Python
Verschieben von CSV-Dateien mit Python Teil 1
Behandeln Sie Base91-Schlüssel mit Python + Redis.
Testen mit Zufallszahlen in Python
GOTO in Python mit erhabenem Text 3
Arbeiten mit LibreOffice in Python: Importieren
Bearbeiten von EAGLE .brd-Dateien mit Python
CSS-Analyse mit cssutils in Python
Einfache Handhabung von Listen mit Python + SQLite3
Bearbeiten Sie Dateien und Ordner in Python
[Python] POST-WAV-Dateien mit Anforderungen [POST]
Behandeln Sie Posix-Nachrichtenwarteschlangen in Python
Behandeln Sie Daten im NetCDF-Format mit Python
Numer0n mit Elementen, die mit Python erstellt wurden
Behandeln Sie das GDS II-Format mit Python
Umgang mit JSON-Dateien in Python