c#中使用ZipFile.Extract解压压缩包的时候,会出现中文文件名乱码的情况,原因是zipfile 会将所有文件名用 CP437 来编码,这就导致了中文乱码
using (var zip = ZipFile.Read(fileToUnzip))
foreach (var e in zip)
if (!string.IsNullOrEmpty(password))
e.ExtractWithPassword(savePath, ExtractExistingFileAction.OverwriteSilently, password);
e.Extract(savePath, ExtractExistingFileAction.OverwriteSilently);
我们可以将解压之后的文件名重命名
var allFiles = GetAllFiles(savePath);
foreach (string txtFile in allFiles)
var name = txtFile.Replace(savePath, "");
byte[] buffer = Encoding.GetEncoding("CP437").GetBytes(name);
string str = "";
str = System.Text.Encoding.Default.GetString(buffer);
str = savePath + str;
str就是最后我们需要的完整路径
c#中使用ZipFile.Extract解压压缩包的时候,会出现中文文件名乱码的情况,原因是zipfile 会将所有文件名用 CP437 来编码,这就导致了中文乱码 using (var zip = ZipFile.Read(fileToUnzip)) { foreach (var e in zip) { if (!string.IsNullOrEmpty...
Function MyZip_AddFile(SrcFile,ZipFile:pchar):integer;stdcall;
功能 :
将文件SrcFile添加到压缩文档ZipFile
参数 : SrcFile 待压缩文件(全路径)
Zipfile 目标文件(全路径)
返回 : 0 成功
说明 : 同名文件将自动被替换(overwrite)
Function MyZip_AddDirectory(SrcPath,ZipFile:pchar):integer;stdcall;
功能 : 将目录SrcPath里的所有文件(子目录)添加到压缩文档ZipFile
参数 : SrcPath 待压缩目录(全路径)
Zipfile 目标文件(全路径)
返回 : 0 成功
说明 : 同名文件将自动被替换(overwrite)
解压文件
Function MyZip_ExtractFileAll(ZipFile,PathName:pchar):integer;stdcall;
功能 : 将ZipFile中包含的所有文件解包到文件夹PathName
参数 : ZipFile 压缩文件(全路径)
PathName 文件输出路径(如果不存在,则自动创建该目录)
返回 : 0 解包的文件数量
说明 : 同名文件将自动被替换(overwrite)
Function MyZip_ExtractFile(ZipFile,srcName,DstName:pchar):integer;stdcall;
功能 : 从ZipFile中将由SrcName指定的文件解包到由DstName指定的目标文件
参数 : Zipfile 压缩文件(全路径)
SrcName 需要解包的文件(不包含路径)
DstName 目标文件(全路径)
返回 : 0 成功
说明 : 同名文件将自动被替换(overwrite)
Function MyZip_GetLastError(out msg : ShortString):integer;stdcall;
功能 : 在压缩/解压的过程中,如有错误发生,可立即调用该函数获取相关错误信息,并由msg返回
参数 : msg 用于返回相关错误信息
返回 : 0 成功
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.Enumeration;
import org.apache.tools.zip.ZipEntry;
import org.apache.tools.zip.ZipFile;
import org.apache.tools.zip.ZipOutputStream;
* 类名: ZipUtil.java
* 描述:压缩/解压缩zip包处理类
* 创建者:XXX
* 创建日期:2015年5月7日 - 下午1:35:02
* 版本: V0.1
* 修改者:
* 修改日期:
public class ZipUtil {
* 功能描述:压缩文件
* 创建者:XXX
* 创建日期: 2015年5月7日 - 下午1:35:18
* 版本: V0.1
* 修改者:
* 修改日期:
* @param directory 指定压缩文件路径 压缩到同目录
* @throws IOException
* void
public static void zip(String directory) throws FileNotFoundException, IOException {
zip("", null, directory);
* 功能描述:压缩文件
* 创建者:XXX
* 创建日期: 2015年5月7日 - 下午1:36:03
* 版本: V0.1
* 修改者:
* 修改日期:
* @param zipFileName 压缩产生的zip包文件名--带路径,如果为null或空则默认按文件名生产压缩文件名
* @param relativePath 相对路径,默认为空
* @param directory 文件或目录的绝对路径
* void
public static void zip(String zipFileName, String relativePath,
String directory) throws FileNotFoundException, IOException {
String fileName = zipFileName;
if (fileName == null || fileName.trim().equals("")) {
File temp = new File(directory);
if (temp.isDirectory()) {
fileName = directory + ".zip";
} else {
if (directory.indexOf(".") > 0) {
fileName = directory.substring(0, directory.lastIndexOf("."))+ "zip";
} else {
fileName = directory + ".zip";
ZipOutputStream zos = new ZipOutputStream(new FileOutputStream(fileName));
try {
zip(zos, relativePath, directory);
} catch (IOException ex) {
throw ex;
} finally {
if (null != zos) {
zos.close();
* 功能描述:压缩文件
* 创建者:XXX
* 创建日期: 2015年5月7日 - 下午1:37:55
* 版本: V0.1
* 修改者:
* 修改日期:
* @param zos 压缩输出流
* @param relativePath 相对路径
* @param absolutPath 文件或文件夹绝对路径
* @throws IOException
* void
private static void zip(ZipOutputStream zos, String relativePath,
String absolutPath) throws IOException {
File file = new File(absolutPath);
if (file.isDirectory()) {
File[] files = file.listFiles();
for (int i = 0; i < files.length; i++) {
File tempFile = files[i];
if (tempFile.isDirectory()) {
String newRelativePath = relativePath + tempFile.getName()
+ File.separator;
createZipNode(zos, newRelativePath);
zip(zos, newRelativePath, tempFile.getPath());
} else {
zipFile(zos, tempFile, relativePath);
} else {
zipFile(zos, file, relativePath);
* 功能描述:压缩文件
* 创建者:XXX
* 创建日期: 2015年5月7日 - 下午1:38:46
* 版本: V0.1
* 修改者:
* 修改日期:
* @param zos 压缩输出流
* @param file 文件对象
* @param relativePath 相对路径
* @throws IOException
* void
private static void zipFile(ZipOutputStream zos, File file,
String relativePath) throws IOException {
ZipEntry entry = new ZipEntry(relativePath + file.getName());
zos.putNextEntry(entry);
InputStream is = null;
try {
is = new FileInputStream(file);
int BUFFERSIZE = 2 <= 0) {
zos.write(buffer, 0, length);
zos.flush();
zos.closeEntry();
} catch (IOException ex) {
throw ex;
} finally {
if (null != is) {
is.close();
* 功能描述:创建目录
* 创建者:XXX
* 创建日期: 2015年5月7日 - 下午1:39:12
* 版本: V0.1
* 修改者:
* 修改日期:
* @param zos zip输出流
* @param relativePath 相对路径
* @throws IOException
* void
private static void createZipNode(ZipOutputStream zos, String relativePath)
throws IOException {
ZipEntry zipEntry = new ZipEntry(relativePath);
zos.putNextEntry(zipEntry);
zos.closeEntry();
* 功能描述:解压缩文件
* 创建者:XXX
* 创建日期: 2015年5月7日 - 下午1:39:32
* 版本: V0.1
* 修改者:
* 修改日期:
* @param zipFilePath zip文件路径
* @param targetPath 解压缩到的位置,如果为null或空字符串则默认解压缩到跟zip包同目录跟zip包同名的文件夹下
* void
public static void unzip(String zipFilePath, String targetPath) throws IOException {
InputStream is = null;
FileOutputStream fileOut = null;
File file = null;
ZipFile zipFile = null;
try {
zipFile = new ZipFile(zipFilePath,"GBK");
String directoryPath = "";
if (null == targetPath || "".equals(targetPath)) {
directoryPath = zipFilePath.substring(0, zipFilePath.lastIndexOf("."));
} else {
directoryPath = targetPath;
for(Enumeration entries = zipFile.getEntries(); entries.hasMoreElements();){
ZipEntry entry = (ZipEntry)entries.nextElement();
file = new File(directoryPath+"/"+entry.getName());
if(entry.isDirectory()){
file.mkdirs();
}else{
//如果指定文件的目录不存在,则创建之.
File parent = file.getParentFile();
if(!parent.exists()){
parent.mkdirs();
is = zipFile.getInputStream(entry);
fileOut = new FileOutputStream(file);
int readLen = 0;
byte[] buffer = new byte[4096];
while ((readLen = is.read(buffer, 0, 4096)) >= 0) {
fileOut.write(buffer, 0, readLen);
fileOut.close();
is.close();
zipFile.close();
} catch (IOException ex) {
throw ex;
} finally {
if(null != zipFile){
zipFile = null;
if (null != is) {
is.close();
if (null != fileOut) {
fileOut.close();
* 功能描述:生产文件 如果文件所在路径不存在则生成路径
* 创建者:XXX
* 创建日期: 2015年5月7日 - 下午1:41:04
* 版本: V0.1
* 修改者:
* 修改日期:
* @param fileName 文件名 带路径
* @param isDirectory 是否为路径
* @return
* File
public static File buildFile(String fileName, boolean isDirectory) {
File target = new File(fileName);
if (isDirectory){
target.mkdirs();
} else {
if (!target.getParentFile().exists()) {
target.getParentFile().mkdirs();
target = new File(target.getAbsolutePath());
return target;
C# 支付宝对账功能(查询+文件下载+
解压+遍历文件+读文件)**需求****流程**1 、调用支付宝接口, 获取
zip 下载地址2、工具代码
定时任务:每天统计昨天的公司支付宝账户实际收益(扣除手续费)。
1 、调用支付宝接口, 获取
zip 下载地址
1 > 下载AopSdk.dll
public void downloadAllBillAlypay()
如果你在使用 Python 中的 zipfile 模块读取压缩文件名时遇到了乱码问题,这可能是因为文件名使用的字符集与 Python 默认的字符集不同所引起的。你可以尝试将文件名解码为正确的字符集,如下所示:
```python
import zipfile
# 打开压缩文件
with zipfile.ZipFile('example.zip', 'r') as zip_file:
# 获取压缩文件中的所有文件名
for file_name in zip_file.namelist():
# 将文件名按照 GBK 解码
decoded_file_name = file_name.encode('cp437').decode('gbk')
print(decoded_file_name)
在上述代码中,我们用 `zip_file.namelist()` 获取了压缩文件中的所有文件名,并对每个文件名进行了解码。这里我假设压缩文件使用的是 CP437 编码(这是 Windows 系统默认的字符集),而你希望将文件名解码为 GBK 编码。你可以根据实际情况修改这些编码。