`

知识收集10【原创】压缩文件里面的中文文件名读取乱码问题解决方案

 
阅读更多

 最近,做了一个批量图片文件导入到系统中的功能,开始读取的时候,中文名的文件名,出现了乱码现象。

    首先我用了java自身提供的zip相关API进行读取的,出现乱码后,我对文件名进行了编码转换处理,依然还是乱码。

    根据我以往的经验,平常乱码的出现,往往是文件名的编码和系统中读取流的编码方式不一致造成的。

    于是,我查看了Windows系统下的编码方式:

    在Windows平台下,进入DOS窗口,输入:chcp


    可以得到操作系统的代码页信息

 

 

参考了活动代码页和字符集对照表:

 

    字符集是:GB2312

    所以,文件名的编码方式是GB2312

 

    接着,我看了公司系统的编码方式:

 

百度了一下这个JVM系统参数的含义:

    sun.jnu.encoding 影响文件名的创建

    file.encoding 则影响到文件内容。

从中,我们可以看到file.encoding=UTF-8

通过以上的查看和了解,我们接下来做一下乱码的分析:

    Java读取文件会自动使用当前Java编码环境进行读取压缩文件。

    存在两种存在的情况:

    1.JAVA环境的编码和上传到服务的文件名编码一致,文件名就显示正常

    2.JAVA环境的编码和上传到服务的文件名编码不一致,文件名就会乱码

通过结果分析,我们可以知道JAVA读取文件时使用的码制file.encoding=UTF-8

由于文件名的编码是GB2312,于是中文文件名乱码出现了。

知道了以上原因,那怎么解决呢?

    于是我考虑两种方案:

    方案一:在操作界面添加提示说明,文件名只能输入非中文形式,最后跟测试人员沟通,pass掉了

    方案二:就是修改操作系统的编码或者公司系统的编码,保持二者读取文件编码一致,但是这种改动对操作系统或者公司系统,影响都是太大,不可能改动。

    方案三:在后台获取文件名后,进行乱码的转换进行解决。这种方案,最后让测试采纳。

方案三解决起来并不容易,我用了Java自带的zip API没能实现编码的转换,于是又baidu了一下,发现ant.jar提供了这种编码的转换

    import org.apache.tools.zip.ZipEntry;

   import org.apache.tools.zip.ZipFile;

   ZipFile zipFile = new ZipFile(file,System.getProperty("sun.jnu.encoding"));

最终实现了中文名的乱码乱码转换,正常显示中文了。

    JVM启用的时候,如果没有特别设置字符集,会根据操作系统的字符集,设置默认的字符集。

分享到:
评论

相关推荐

    zip库(解决文件名中文乱码问题).zip

    "zip库(解决文件名中文乱码问题).zip" 提供了一个针对C++编程语言的解决方案,专门用于处理ZIP文件中中文文件名的乱码问题。这个问题在处理包含非ASCII字符(例如中文字符)的文件时经常出现,因为标准的ZIP库可能不...

    Java中压缩与解压--中文文件名乱码解决办法

    ### Java中压缩与解压——中文文件名乱码解决办法 #### 一、问题背景及原理分析 在Java中处理文件的压缩与解压时,经常会遇到中文文件名出现乱码的问题。这个问题主要源于Java中默认使用的编码方式与实际文件名...

    ZipOutputStream 压缩文件以及乱码问题解决方案

    本文将深入探讨如何使用ZipOutputStream进行文件压缩,并解决可能出现的乱码问题。 首先,我们来看`ZipOutputStream`的基本用法。这个类继承自`FilterOutputStream`,提供了创建ZIP文件的功能。以下是一个简单的...

    SharpCompress 解压缩zip,rar文件,解决中文乱码

    总的来说,SharpCompress库为C#开发者提供了高效且灵活的文件压缩和解压缩解决方案。通过理解其API,我们可以轻松处理各种压缩格式,并解决在处理中文文件名时可能出现的问题。在实际开发中,根据具体需求调整代码,...

    ZipUtil文件压缩工具类(解决中文乱码)

    总之,`ZipUtil`文件压缩工具类通过结合`ZipEntry`和`ZipOutputStream`,提供了一种高效且健壮的解决方案,尤其适合处理包含中文字符的文件和目录,确保在压缩和解压过程中不会出现乱码问题。这对于需要在Java应用...

    java android zip解压缩(解决压缩中文乱码问题)

    然而,当压缩文件包含中文字符时,解压缩过程中可能会遇到乱码问题。这是因为编码格式不匹配或者处理方式不当导致的。本篇文章将深入探讨如何在Android平台上解决Java ZIP库在解压缩中文文件时出现的乱码问题。 ...

    用java对文件进行压缩并且解决乱码问题

    乱码问题的解决方案通常涉及设置正确的字符编码。在创建`ZipOutputStream`实例时,可以传递一个`ZipEncoding`对象,用于处理ZIP条目的名称。如果未指定,则默认使用平台的默认字符集,这可能导致在不同系统上解压时...

    zip解压缩乱码的解决方案

    本文将深入探讨ZIP解压缩乱码的解决方案,帮助你解决这个问题。 1. **理解字符编码** - 字符编码是计算机存储和显示文本的方式,常见的有ASCII、GBK、UTF-8等。不同的编码方式对于特殊字符的表示不同,如果编码不...

    ZipInputStream解压有中文名报错问题解决

    以上就是关于“ZipInputStream解压有中文名报错问题”的详细解析,包括问题的根源、关键概念以及多种解决方案。在实际开发中,根据项目需求和环境选择合适的解决策略是非常重要的,以确保程序能够正确处理各种情况下...

    压缩工具类改良版(解决中文乱码)

    总的来说,这个项目提供了一个优化的解决方案,解决了Java中使用`ZipEntry`压缩中文文件时可能出现的乱码问题。通过理解`ZipEntry`的工作原理,以及如何正确处理字符编码,开发者可以更好地理解和应用这个工具类,...

    C#解压文件,中文不乱码

    在C#编程中,处理ZIP压缩文件是一项常见的任务,尤其是当你需要读取或写入包含中文文件名的压缩包时,正确处理字符编码至关重要,以免出现乱码问题。本篇文章将详细探讨如何在C#中解压ZIP文件,并确保中文文件名在...

    多文件压缩zip

    这个主题涵盖了解压缩过程,以及如何处理中文乱码问题。本文将深入探讨相关知识点。 首先,我们来了解ZIP文件格式。ZIP是一种广泛使用的文件存档格式,它允许用户将多个文件和目录打包在一起,并进行压缩,以节省...

    基于Java向zip压缩包追加文件

    通过上述步骤,可以实现基于Java向ZIP压缩包追加文件的功能,虽然这个过程涉及解压和再压缩,但它是最常见的解决方案,因为Java的标准库不直接支持追加操作。在实际应用中,可以根据具体需求进行优化和调整,以满足...

    linux环境下利用zlib库实现压缩目录的c++程序

    8. **readme文档**:为了方便他人复现和理解你的程序,readme文档应详细描述步骤,包括编译、运行、预期输出和可能遇到的问题及解决方案。 以上步骤是实现这个C++程序的关键点。在实际编写代码时,可能需要对每个...

    知识收集2

    3. **解决方案**:解决乱码问题通常需要在创建压缩流时明确指定编码。例如,可以使用`Charset.forName("GBK")`来指定GBK编码,确保与文件系统的编码一致。在解压缩时,同样需要正确读取编码信息,避免乱码。 4. **...

    Java压缩文件目录成ZIP包最新技巧

    本文将详细介绍如何使用`java.util.zip`包中的类来压缩文件及目录,并解决其中的一个常见问题——中文文件名或目录名的支持问题。 #### 一、Java自带压缩工具简介 Java标准库提供了`java.util.zip`包来处理文件的...

    java zipentry.jar 解决解压失败问题

    在本例中,虽然没有具体的压缩包子文件的文件名称列表,但上述解决方案适用于任何包含中文文件名的ZIP文件。通过遵循这些最佳实践,你可以在Java环境中成功地解压和处理包含非ASCII字符的压缩文件。

    乱码王国

    6. **解压问题**:压缩包中的文件可能出现乱码,这可能是因为压缩软件的设置问题,如编码设置不正确,或者压缩时文件名编码被破坏。解压时需要选择正确的编码方式,或者使用能自动识别编码的解压工具。 7. **编程...

    安卓文件下载上传解压相关-andorid采用post方法把文件传输到自己写的服务器并解决了文件中文编码问.rar

    解决方案是在读写文件名时指定正确的编码格式,如UTF-8。在发送HTTP请求时,确保设置合适的`Content-Type`,如`application/x-www-form-urlencoded; charset=UTF-8`。 5. **服务器端处理**: 服务器端接收到POST...

    zip4j压缩 加密 解压缩

    在处理包含中文文件名的压缩文件时,`zip4j`表现优秀,它能正确处理中文字符,避免在压缩或解压缩过程中出现乱码问题。这得益于其对Unicode编码的支持,使得它能够正确保存和恢复非ASCII字符,包括中文字符。 ### 3...

Global site tag (gtag.js) - Google Analytics