如何解决java程序解压含有中文名的zip压缩包出现乱码

Python011

如何解决java程序解压含有中文名的zip压缩包出现乱码,第1张

上次利用java自动的java.util.zip.ZipEntry和�0�2java.util.zip.ZipFile来解压zip文件,今天发现程序在读取解压文件时居然报了空指针异常,debug程序后发现时读取不到文件,产生原先是zip压缩文件中含有中文的名称,读取文件名为乱码,报找不到文件名,所以报了空指针,想到ant构建文件也有这个功能,换了apache的ant.jar居然解决了中文的问题。备份下。�0�2import java.io.BufferedReaderimport java.io.Fileimport java.io.IOExceptionimport java.io.InputStreamReaderimport java.util.Enumerationimport org.apache.tools.zip.ZipEntryimport org.apache.tools.zip.ZipFile/*** 读取zip压缩文件中文本的内容* @author fish*/public class ReadZip {public static void main(String args[]) {try {String fileName = "D:/workspace/java/src/ReadZip.zip"//构造ZipFileZipFile zf = new ZipFile(new File(fileName))//返回 ZIP file entries的枚举.Enumeration<? extends ZipEntry entries = zf.getEntries()while (entries.hasMoreElements()) {ZipEntry ze = entries.nextElement()System.out.println("name:"+ze.getName())long size = ze.getSize()if (size 0) {System.out.println("Length is " + size)BufferedReader br = new BufferedReader(new InputStreamReader(zf.getInputStream(ze)))String linewhile ((line = br.readLine()) != null) {

要明白,用filewriter读取文件采取的是平台默认编码(视操作系统而定)。当要写入的文本文件编码和平台默认编码不一致时,就会出现中文乱码的情况。这时可以使用filewriter 的父类OutputStreamWriter来读取。OutputStreamWriter允许用户指定编码方式,代码为:

FileInputStream fis=new FileInputStream("文件路径");

OutputStreamWriter osw=new OutputStreamWriter(fis,"文本文件的编码方式(ANSI,UTF-8...)")

osw.write()

这样写入的编码可以保证和源文本文件编码一致,就不会出现乱码了。

当我们不加设置就编译时,相当于使用了参数:javac -encoding gbk XX.java,当然就会出现不兼容的情况。

解决方法:

1、转换成UTF-8编码格式,但仍然有错解决办法是:应该使用-encoding参数指明编码方式:javac -encoding UTF-8 XX.java

2、开始-->计算机-->鼠标反键(鼠标右键)-->属性-->高级系统设置-->环境变量-->系统变量新建。然后输入:“JAVA_TOOL_OPTIONS”变量,值为“-Dfile.encoding=UTF-8”然后确定、确定、在确定后。新开命令行窗口,再次输入javac命令。