最近,做了一个批量图片文件导入到系统中的功能,开始读取的时候,中文名的文件名,出现了乱码现象。
首先我用了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" 提供了一个针对C++编程语言的解决方案,专门用于处理ZIP文件中中文文件名的乱码问题。这个问题在处理包含非ASCII字符(例如中文字符)的文件时经常出现,因为标准的ZIP库可能不...
### Java中压缩与解压——中文文件名乱码解决办法 #### 一、问题背景及原理分析 在Java中处理文件的压缩与解压时,经常会遇到中文文件名出现乱码的问题。这个问题主要源于Java中默认使用的编码方式与实际文件名...
本文将深入探讨如何使用ZipOutputStream进行文件压缩,并解决可能出现的乱码问题。 首先,我们来看`ZipOutputStream`的基本用法。这个类继承自`FilterOutputStream`,提供了创建ZIP文件的功能。以下是一个简单的...
总的来说,SharpCompress库为C#开发者提供了高效且灵活的文件压缩和解压缩解决方案。通过理解其API,我们可以轻松处理各种压缩格式,并解决在处理中文文件名时可能出现的问题。在实际开发中,根据具体需求调整代码,...
总之,`ZipUtil`文件压缩工具类通过结合`ZipEntry`和`ZipOutputStream`,提供了一种高效且健壮的解决方案,尤其适合处理包含中文字符的文件和目录,确保在压缩和解压过程中不会出现乱码问题。这对于需要在Java应用...
然而,当压缩文件包含中文字符时,解压缩过程中可能会遇到乱码问题。这是因为编码格式不匹配或者处理方式不当导致的。本篇文章将深入探讨如何在Android平台上解决Java ZIP库在解压缩中文文件时出现的乱码问题。 ...
乱码问题的解决方案通常涉及设置正确的字符编码。在创建`ZipOutputStream`实例时,可以传递一个`ZipEncoding`对象,用于处理ZIP条目的名称。如果未指定,则默认使用平台的默认字符集,这可能导致在不同系统上解压时...
本文将深入探讨ZIP解压缩乱码的解决方案,帮助你解决这个问题。 1. **理解字符编码** - 字符编码是计算机存储和显示文本的方式,常见的有ASCII、GBK、UTF-8等。不同的编码方式对于特殊字符的表示不同,如果编码不...
以上就是关于“ZipInputStream解压有中文名报错问题”的详细解析,包括问题的根源、关键概念以及多种解决方案。在实际开发中,根据项目需求和环境选择合适的解决策略是非常重要的,以确保程序能够正确处理各种情况下...
总的来说,这个项目提供了一个优化的解决方案,解决了Java中使用`ZipEntry`压缩中文文件时可能出现的乱码问题。通过理解`ZipEntry`的工作原理,以及如何正确处理字符编码,开发者可以更好地理解和应用这个工具类,...
在C#编程中,处理ZIP压缩文件是一项常见的任务,尤其是当你需要读取或写入包含中文文件名的压缩包时,正确处理字符编码至关重要,以免出现乱码问题。本篇文章将详细探讨如何在C#中解压ZIP文件,并确保中文文件名在...
这个主题涵盖了解压缩过程,以及如何处理中文乱码问题。本文将深入探讨相关知识点。 首先,我们来了解ZIP文件格式。ZIP是一种广泛使用的文件存档格式,它允许用户将多个文件和目录打包在一起,并进行压缩,以节省...
通过上述步骤,可以实现基于Java向ZIP压缩包追加文件的功能,虽然这个过程涉及解压和再压缩,但它是最常见的解决方案,因为Java的标准库不直接支持追加操作。在实际应用中,可以根据具体需求进行优化和调整,以满足...
8. **readme文档**:为了方便他人复现和理解你的程序,readme文档应详细描述步骤,包括编译、运行、预期输出和可能遇到的问题及解决方案。 以上步骤是实现这个C++程序的关键点。在实际编写代码时,可能需要对每个...
3. **解决方案**:解决乱码问题通常需要在创建压缩流时明确指定编码。例如,可以使用`Charset.forName("GBK")`来指定GBK编码,确保与文件系统的编码一致。在解压缩时,同样需要正确读取编码信息,避免乱码。 4. **...
本文将详细介绍如何使用`java.util.zip`包中的类来压缩文件及目录,并解决其中的一个常见问题——中文文件名或目录名的支持问题。 #### 一、Java自带压缩工具简介 Java标准库提供了`java.util.zip`包来处理文件的...
在本例中,虽然没有具体的压缩包子文件的文件名称列表,但上述解决方案适用于任何包含中文文件名的ZIP文件。通过遵循这些最佳实践,你可以在Java环境中成功地解压和处理包含非ASCII字符的压缩文件。
6. **解压问题**:压缩包中的文件可能出现乱码,这可能是因为压缩软件的设置问题,如编码设置不正确,或者压缩时文件名编码被破坏。解压时需要选择正确的编码方式,或者使用能自动识别编码的解压工具。 7. **编程...
解决方案是在读写文件名时指定正确的编码格式,如UTF-8。在发送HTTP请求时,确保设置合适的`Content-Type`,如`application/x-www-form-urlencoded; charset=UTF-8`。 5. **服务器端处理**: 服务器端接收到POST...
在处理包含中文文件名的压缩文件时,`zip4j`表现优秀,它能正确处理中文字符,避免在压缩或解压缩过程中出现乱码问题。这得益于其对Unicode编码的支持,使得它能够正确保存和恢复非ASCII字符,包括中文字符。 ### 3...