我正在努力让 7za.exe 创建一个包含非拉丁字符的档案。编码是 utf-8,字符是西里尔字母。我有一个包含 4 个文件的文件夹:
7za.exe privet.txt Кириллица.txt test.py
其中test.py的内容如下:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
SOURCE_FILE = "Кириллица.txt"
DEST_ARCHIVE = "Кириллица.7z"
import subprocess
subprocess.call('7za a -bd -y privet.7z privet.txt', shell=True)
cmd_str = '7za a -bd -y %s %s' % (DEST_ARCHIVE, SOURCE_FILE)
subprocess.call(cmd_str, shell=True)
虽然我可以从 privet.txt 创建 privet.7z,但我无法从 Кириллица.txt 创建 Кириллица.7z(而是生成了一个名为 Кириллица.7z 的空档案)。
7za.exe 的输出是:
C:\BEPPE\STAMPARE\TEST_7za_cyrillic>python test.py
7-Zip (A) 9.20 Copyright (c) 1999-2010 Igor Pavlov 2010-11-18
Scanning
Creating archive privet.7z
Everything is Ok
7-Zip (A) 9.20 Copyright (c) 1999-2010 Igor Pavlov 2010-11-18
Scanning
ÐsиÑ_иллиÑ┼а.txt: WARNING: Impossibile trovare il file specificato.
Creating archive ÐsиÑ_иллиÑ┼а.7z
WARNINGS for files:
ÐsиÑ_иллиÑ┼а.txt : Impossibile trovare il file specificato.
----------------
WARNING: Cannot find 1 file
有人能帮我吗?我还尝试使用批处理脚本 test.bat 执行以下内容:
7za.exe a -bd -y privet.7z privet.txt
7za.exe a -bd -y Кириллица.7z Кириллица.txt
但结果是一样的。
答案1
处理 UTF-8(统一码, 真的是不是简单,我一点也不惊讶 UTF-8(甚至非 ASCII)文件名的处理竟然还没有完成。所创建文件的混乱名称暗示文件名处理存在严重问题(压缩/解压程序可能受到恶意内容的威胁)。我会将其作为有毒材料处理,寻找更强大的压缩解决方案。