背景:window 下通过压缩软件对文件夹进行压缩后,上传到linux 服务器上,进行解压。

问题:出现中文名名称的文件乱码

尝试解决方案:

1、解压根据 指定编码解压。 #CP936   其实就是GBK(window下的编码,cmd  命令:chcp ,可以看到)。

    通过unzip行命令解压,指定字符集。

    在阿里云ecs 上按照此方法,可行。但是在私有服务器上,可能由于环境配置问题,未果!!!

unzip -O CP936 xxxx.zip

2.尝试切换 解压方式,例如 tar.gz、7z 等方式后,依然不好使

3.在window下针对 压缩文件源 使用 java 程序,指定编码 进行 压缩。然后将压缩包上传至 linux ,直接解压,中文名可以正常显示。

代码如下:

package com.rexel;import org.apache.tools.zip.ZipEntry;
import org.apache.tools.zip.ZipOutputStream;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;import java.io.*;/*** @ClassName CompressTest* @Description TODO* @Author Hai.Dong* @Date 2021/5/12 14:22**/
public class CompressTest {private final static Logger logger = LoggerFactory.getLogger(CompressTest.class);private static final int BUFFER_SIZE = 2 * 1024;public static void main(String[] args) throws Exception {//调用  toZip 方法,进行 指定 编码 压缩}/*** 压缩成ZIP** @param srcFilePath      压缩文件路径* @param tarFilePath      目标ZIP输出路径* @param KeepDirStructure 是否保留原来的目录结构,true:保留目录结构;*                         false:所有文件跑到压缩包根目录下(注意:不保留目录结构可能会出现同名文件,会压缩失败)* @throws Exception 压缩失败会抛出异常*/public static boolean toZip(String srcFilePath, String tarFilePath, boolean KeepDirStructure) throws Exception {boolean isCompressSuccess = false;long start = System.currentTimeMillis();FileOutputStream fos = null;ZipOutputStream zos = null;try {File sourceFile = new File(srcFilePath);if (!sourceFile.exists()) {throw new FileNotFoundException("待压缩文件 [" + srcFilePath + "]不存在.");}fos = new FileOutputStream(new File(tarFilePath));zos = new ZipOutputStream(fos);// 设置压缩的编码,解决压缩路径中的中文乱码问题zos.setEncoding("UTF-8");compress(sourceFile, zos, sourceFile.getName(), KeepDirStructure);isCompressSuccess = true;long end = System.currentTimeMillis();logger.info("【文件压缩】 压缩完成,耗时:{} ms", (end - start));} catch (Exception e) {logger.error("【文件压缩】 压缩失败", e);throw new RuntimeException("文件压缩失败", e);} finally {closeOutPutStream(zos);closeOutPutStream(fos);}return isCompressSuccess;}/*** 递归压缩方法** @param sourceFile       源文件* @param zos              zip输出流* @param name             压缩后的名称* @param KeepDirStructure 是否保留原来的目录结构,true:保留目录结构;*                         false:所有文件跑到压缩包根目录下(注意:不保留目录结构可能会出现同名文件,会压缩失败)* @throws Exception*/private static void compress(File sourceFile, ZipOutputStream zos, String name, boolean KeepDirStructure)throws Exception {byte[] buf = new byte[BUFFER_SIZE];if (sourceFile.isFile()) {// 向zip输出流中添加一个zip实体,构造器中name为zip实体的文件的名字zos.putNextEntry(new ZipEntry(name));// copy文件到zip输出流中int len;FileInputStream in = new FileInputStream(sourceFile);while ((len = in.read(buf)) != -1) {zos.write(buf, 0, len);}zos.closeEntry();in.close();} else {File[] listFiles = sourceFile.listFiles();if (listFiles == null || listFiles.length == 0) {// 需要保留原来的文件结构时,需要对空文件夹进行处理if (KeepDirStructure) {// 空文件夹的处理zos.putNextEntry(new ZipEntry(name + "/"));// 没有文件,不需要文件的copyzos.closeEntry();}} else {for (File file : listFiles) {// 判断是否需要保留原来的文件结构if (KeepDirStructure) {// 注意:file.getName()前面需要带上父文件夹的名字加一斜杠,// 不然最后压缩包中就不能保留原来的文件结构,即:所有文件都跑到压缩包根目录下了compress(file, zos, name + "/" + file.getName(), KeepDirStructure);} else {compress(file, zos, file.getName(), KeepDirStructure);}}}}}/*** 释放资源** @param ops* @return void* @Title closeOutPutStream*/public static void closeOutPutStream(OutputStream ops) {if (ops != null) {try {ops.close();} catch (IOException ex) {logger.error("关闭输出流失败", ex);}}}
}

参考文章链接:https://blog.csdn.net/a754315344/article/details/82708111?utm_medium=distribute.pc_relevant.none-task-blog-baidujs_title-4&spm=1001.2101.3001.4242

linux 解压 文件 中文名乱码相关推荐

  1. python rarfile不支持中文路径_python使用zipfile解压文件中文乱码问题

    中文在编程中真实后娘养的,各种坑爹,python3下中文乱码这个问题抓破了头皮,头疼.看了alex的文章,才有种恍然大悟的感觉(链接在底部). 一句话,就是转换成unicode,压缩前是什么编码,使用 ...

  2. linux的文件解压命令,linux解压命令(linux解压文件命令)

    在Linux指令下解压扩展名为".zip"的文件,最简单有用的方法是运用解压缩程序unzip来完结,详细的步骤如下: 装置unzip解压缩程序 通常情况下,Linux系统下都自带u ...

  3. linux解压文件命令

    linux解压文件命令: 1..tar 解包:tar xvf FileName.tar  -C [指定目录] 打包:tar cvf FileName.tar DirName (注:tar是打包,不是压 ...

  4. linux 解压文件乱码,云服务器:解决linux下zip文件解压乱码问题

    云服务器:解决linux下zip文件解压乱码问题 原因 由于zip格式并没有指定编码格式,Windows下生成的zip文件中的编码是GBK/GB2312等,因此,导致这些zip文件在Linux下解压时 ...

  5. Ubuntu系统解压文件后乱码解决方法

    Ubuntu系统使用解压文件常见问题 在Ubuntu18.04下,如果直接解压压缩文件: 右键选择提取到此处 发生乱码. 乱码原因:Windows下生成的zip文件中的编码是GBK/GB2312等,因 ...

  6. java解压中文乱码_java解压文件中文乱码怎么处理

    上次利用java自动的java.util.zip.ZipEntry和??java.util.zip.ZipFile来解压zip文件,今天发现程序在读取解压文件时居然报了空指针异常,debug程序后发现 ...

  7. 在linux解压文件夹,在linux 下解压 rar 文件

    linux 中,要解压 rar 文件需要 安装 rarlinux 工具,我用的是 Centos 7.1 x64 首先下载 tar 包,我下载的是 rarlinux-x64-3.8.0.tar.gz 我 ...

  8. windows 解压文件出现乱码 7zip解压文件中文乱码 解决方法

    按照如下教程,更改windows默认编码格式为utf-8之后. https://blog.csdn.net/qq_43780850/article/details/129122210 解压文件时,文件 ...

  9. linux下mkdirs方法乱码,linux 解压zip中文乱码问题

    本文用程序解决的的,有兴趣可以看一看,limux有解决中文乱码问题,,请去其他博客. 方法一:使用java importjava.io.File;importjava.io.FileOutputStr ...

最新文章

  1. maven 主工程 java_Maven创建Java Application工程(既jar包)
  2. 计组之指令系统:1、指令系统概述(定义、分类、格式、扩展操作码指令格式)
  3. kafka tool报错:Error fetching datea.Offset out of range
  4. mysql中union,左连接,右连接,与内连接
  5. String字符串工具类 StringUtils.java
  6. poj_1442 Treap
  7. android开发之自定义AutoCompleteTextView
  8. 项目:心肺复苏按压仪+沁恒赤兔ch32v307+嵌入式开发
  9. STM32F103 CubeMX:ETR外部脉冲计数器
  10. JavaScript中原生Array数组方法详解
  11. 计算机核心基础、计算机硬件组成原理、计算机硬件组成详解、硬盘接口及操作系统、计算机网络简述、OSI七层协议、子网划分、 VLAN简述
  12. java中GRID_size的作用_Grid布局简介
  13. STM32之USART:RXD和TXD管脚互换、接收和发送的电平极性反转、支持数据高位与低位反序发送或接收
  14. [Swift]国际化
  15. Word:自动给图表按照章节编号(对大论文很重要)
  16. 微信小程序10:WXML 组件- 轮播图 swiper
  17. 找不到老赖本人,法院可以执行其财产吗?
  18. 分子动力学(MD)模拟,模拟体系构建经验总结
  19. java 头像 微信群_JAVA-仿微信九宫格头像
  20. 计算机专业找实习攻略大全,先别急着进大厂搞定实习再说

热门文章

  1. 自助下单彩虹云商城系统2023最新免授权独立版源码安装教程
  2. 电影院订票选座网站系统 毕业设计毕设源码毕业论文参考(2)前台功能
  3. yt88加密狗不识别_YT88 是天域一个很不错的加密狗工具,可以源码 ,还 外壳 ,带DLK开发包。 Windows Develop 256万源代码下载- www.pudn.com...
  4. python排课问题_如何完美解决老师走班排课的排课难题?
  5. BetaFlight开源工程结构简明介绍
  6. 使用Betaflight Configurator飞控刷写固件时各步骤的含义
  7. 高数_证明_高斯公式
  8. 数据库专门的关系运算
  9. react native 集成腾讯语音合成TTS(android)
  10. 【人工智能AI2.0】国产开源 ChatGPT: ChatGLM-6B 搭建属于你的永远免费的本地 ChatGPT