7za.exe 9.20 无法创建带有非英文字母文件名的档案(utf-8)

7za.exe 9.20 无法创建带有非英文字母文件名的档案(utf-8)

我正在努力让 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)文件名的处理竟然还没有完成。所创建文件的混乱名称暗示文件名处理存在严重问题(压缩/解压程序可能受到恶意内容的威胁)。我会将其作为有毒材料处理,寻找更强大的压缩解决方案。

答案2

这对我有用:

  1. 下载记事本++(即使小于 900KB 的极简包也可以)

  2. 转到Settings / Preferences / New Document选项卡并设置默认编码无 BOM 的 UTF-8

    1

  3. 打开一个新文档并在其中输入以下命令:

    cmd /u /c "chcp 65001 >nul && 7za.exe a -bd -y Кириллица.7z Кириллица.txt"
    
  4. 确保 Notepad++ 的状态栏显示ANSI 作为 UTF-8并将文档保存为 .BAT 文件:

    2

  5. 打开命令提示符并运行批处理文件

另请参阅这里如果您希望命令提示符窗口显示 Unicode 字符。

相关内容