Wenn Sie unter Linux die aus Japan heruntergeladene Zip-Datei erweitern, wird der japanische Dateiname verstümmelt und es kommt häufig vor. Also benutze ich es normalerweise so, wie es ist, ohne mir darüber Sorgen zu machen, und wenn ich es nicht brauche, möchte ich es wegwerfen. Selbst wenn es notwendige Dateien gibt, ist es keine große Zahl, deshalb habe ich sie selbst umbenannt. Dieses Mal gab es eine Situation, in der es nutzlos war, wenn ich nicht eine gute Anzahl von Dateien reparierte, also habe ich ein wenig recherchiert.
Grundsätzlich liegt es daran, dass eine App, die unter Windows Multibyte ausführt, den Dateinamen raw in zip mit cp932 einbettet. Wenn dies als cp932 in das Dateisystem geschrieben wird, wenn es auf Linux-Seite erweitert wird, ist die Konvertierung einfach. Die Geschichte ist, dass Sie es durch "iconv -f shift-jis -t utf-8" in der Shell umbenennen können. Beim Exportieren von Raw ist nur 0x2F außerhalb des Dateinamens, dies ist jedoch nicht im zweiten Byte von cp932 enthalten, sodass dies kein Problem zu sein scheint. Es scheint jedoch, dass eine Konvertierung auf den Nicht-ASCII-Teil angewendet wurde und nicht ordnungsgemäß wiederhergestellt werden kann.
Als ich suchte, gab es einen Austausch wie "Schreiben in Python mit Stapelüberlauf", so dass es einfach zu schreiben war. Ich bin eine Person, die normalerweise keine nützlichen Werkzeuge in Klebesprache schreiben kann.
unzip.py
#!/usr/bin/env python
import sys
import zipfile
def main(filename):
with zipfile.ZipFile(filename) as zip:
for info in zip.infolist():
info.filename = info.filename.decode('shift-jis').encode('utf-8')
zip.extract(info)
if __name__ == '__main__':
sys.exit(main(sys.argv[1]))
Ein Skript, das einfach die Zip-Datei des ersten Arguments erweitert und denkt, dass es einen SJIS-Dateinamen hat, ohne die Fehlerbehandlung zu berücksichtigen.
Wenn ich mich also mit der Ursache der verstümmelten Charaktere befasse, die denken, ich sollte mir eine Notiz über Qiita machen, sieht es unter dem Leuchtturm dunkel aus. Orz mit der Option, den Zeichencode richtig zu konvertieren
$ unzip -O sjis foo.zip
Es scheint, dass dies alles ist, was Sie brauchen. Irgendwie sind -O und -I das Gegenteil meiner Intuition, aber es scheint, dass -O die Codierung im Archiv und -I die Codierung des Zieldateisystems angibt. Es scheint auch, dass die seltsame Codierung durchgeführt wurde, weil die automatische Erkennung fehlgeschlagen ist.
Lesen Sie mehr über Hilfe, bevor Sie sich die Quelle ansehen. Darüber hinaus hat Qiita auch Antwort.
Es war eine völlige Verschwendung von Arbeit, wenn ich mein Gewicht hob und etwas tat, was ich normalerweise nicht tun würde. Aber warum schreibst du gerne großen Code, hasst es aber, kurzen Code zu schreiben? Vielleicht, weil das Kesselplattenverhältnis hoch ist.