『壹』 用java直接读取zip类型的文件时中文乱码问题怎么解决
1.一般来是软件程序解码错误自。如浏览器把GBK码当成是Big5码显示,或电子邮件程序把对方传来的邮件错误解码。如果在发送时编码错误,收件者的电邮程序是不能解码的,需要寄件者的电邮程序重新编码再寄。2.字体档案(font file)不对。3.来源编码错误,或文件受到破坏。4.一种语言版本的操作系统安装了另外一种语言版本的应用程序,或者应用程序安装的升级补丁的语言版本与应用程序原来安装的语言版本不一致。5.早期单字节的应用程序在打开双字节语言的文件时不能正确识别文字的分割,在换行的地方把一个字从中分成两段,导致紧接在后面的整个一行全部都是乱码。6.低版本的应用程序不能识别高版本的程序创建的文件。7.由于TXD等修改文件出现内部冲突,一些修改游戏的MOD(modification)CLEO、IV补丁、真实补丁、技能补丁、升级补丁和CCI人物补丁等游戏修改软件的“Readme”“必看!”等阅读文件会出现乱码。
『贰』 java用apache的ZipEntry压缩文件名为中文的word文件时,文件名乱码
apache自带的zip方法有缺陷,没有做中文的判断的,这个是它的一个已知。解决办法:用jdk的rt.jar里面的方法实现就可以了。可以参考下以下工具类:import java.io.BufferedInputStream;import java.io.BufferedOutputStream;import java.io.Closeable;import java.io.File;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStream;import java.util.Enumeration;import java.util.zip.ZipEntry;import java.util.zip.ZipFile;/** * * @author gdb */public class ZipUtilAll { public static final int DEFAULT_BUFSIZE = 1024 * 16; /** * 解压Zip文件 * * @param srcZipFile * @param destDir * @throws IOException */ public static void unZip(File srcZipFile, String destDir) throws IOException { ZipFile zipFile = new ZipFile(srcZipFile); unZip(zipFile, destDir); } /** * 解压Zip文件 * * @param srcZipFile * @param destDir * @throws IOException */public static void unZip(String srcZipFile, String destDir) throws IOException { ZipFile zipFile = new ZipFile(srcZipFile); unZip(zipFile, destDir); } /** * 解压Zip文件 * * @param zipFile * @param destDir * @throws IOException */ public static void unZip(ZipFile zipFile, String destDir) throws IOException { Enumeration<? extends ZipEntry> entryEnum = zipFile.entries(); ZipEntry entry = null; while (entryEnum.hasMoreElements()) { entry = entryEnum.nextElement(); File destFile = new File(destDir + entry.getName()); if (entry.isDirectory()) { destFile.mkdirs(); } else { destFile.getParentFile().mkdirs(); InputStream eis = zipFile.getInputStream(entry); System.out.println(eis.read()); write(eis, destFile); } } } /** * 将输入流中的数据写到指定文件 * * @param inputStream * @param destFile */ public static void write(InputStream inputStream, File destFile) throws IOException { BufferedInputStream bufIs = null; BufferedOutputStream bufOs = null; try { bufIs = new BufferedInputStream(inputStream); bufOs = new BufferedOutputStream(new FileOutputStream(destFile)); byte[] buf = new byte[DEFAULT_BUFSIZE]; int len = 0; while ((len = bufIs.read(buf, 0, buf.length)) > 0) { bufOs.write(buf, 0, len); } } catch (IOException ex) { throw ex; } finally { close(bufOs, bufIs); } } /** * 安全关闭多个流 * * @param streams */ public static void close(Closeable… streams) { try { for (Closeable s : streams) { if (s != null) s.close(); } } catch (IOException ioe) { ioe.printStackTrace(System.err); } } /** * @param args * @throws java.lang.Exception */ public static void main(String[] args) throws Exception {// unZip(new File(ZipDemo.class.getResource("D:/123/HKRT-B2B.zip").toURI()), "D:/123/"); unZip("D:/123/123.zip", "D:/123/");// new File(); }}
『叁』 java文件名乱码
修改一下文件的编码格式,utf-8。右击乱码文件,选择propertise,在Text file encoding 处修改编码格式。
『肆』 java压缩zip文件中文乱码问题
我以前来也遇到过这个问源题,最后发现java自带的zip压缩没办法解决中文名乱码的问题你可以使用apache ant的zip类(package: org.apache.tools.zip)来解决这个问题。
『伍』 java中如何保证下载的压缩包命名中有中文
在使用Java对ZIP压缩文件进行解压的方式中有两种,一种是使用apache提供的ant.jar工具包,但是如果ZIP文件中含有中文名称的文件,在解压后,文件名将出现乱码,另一种是使用Java自身JDK中java.util.zip包下工具类,但是同样如果有中文名的情况下依然会出现乱码情况。因此对于这种乱码的处理,一种是修改JDK下的几个源文件,一种就是把需要用的JDK源文件重新反编译进行处理,单独放在一个包中,在使用的时候,调用自己处理过的包中文件进行处理即可。附件tools.rar压缩文件是我进行处理过后的需要调用到的java源程序,主要为Deflater.java,DeflaterOutputStream.java,InflaterInputStream.java,ZipConstants.java,ZipEntry.java,ZipInputStram.java,ZipOutputStream.java文件,同时包含一个解压缩文件CompressZipFile.java
『陆』 用java压缩文件,中文文件名成了乱码。 问题应该是出在流里了。 要怎么解决呢
我一般都是用writeUTF()方法往文件里写东西 File file = new File("…….");FileOutputStream fos = new FileOutputStream(file);DataOutputStream dos = new DataOutputStream(fos);dos.writeUTF("blablabla");
『柒』 如何解决java程序解压含有中文名的zip压缩包出现乱码
上次利用java自动的java.util.zip.ZipEntry和
『捌』 java Zip解析乱码问题
debug一下,看看filepath输出什么,看看下面这个代码import java.io.*; import java.util.zip.*; public class Zip { static final int BUFFER = 2048; static boolean flag = false; public static void main(String args[])throws IOException{ File file= new File("D:/Temp"); ZipSubdirectory(file); FileInputStream file1 = new FileInputStream(ZipSubdirectory(file)); System.out.println(file1.toString()); } //ZipSubdirectory函数将一个指定目录(包括它子目录)压缩成一个同名压缩文件(这里称为"ORIGIN") public static File ZipSubdirectory(File myDir)throws IOException{ //创建缓冲输入流BufferedInputStream BufferedInputStream origin = null; //创建ZipOutputStream对象,将向它传递希望写入文件的输出流 File zipFile=new File("D:/"+myDir.getName()+".zip"); FileOutputStream fos=new FileOutputStream(zipFile); ZipOutputStream out=new ZipOutputStream(new BufferedOutputStream(fos,BUFFER)); //dirContents[]获取当前目录(myDir)所有文件对象(包括子目录名) File dirContents[]=myDir.listFiles(); //创建临时文件tempFile,使用后删除 File tempFile=null; try{ //处理当前目录所有文件对象,包括子目录 for(int i=0;i < dirContents.length; i++){ //使用递归方法将当前目录的子目录转成一个ZIP文件,并作为一个ENTRY加进"ORIGIN" if(dirContents[i].isDirectory()){ tempFile = ZipSubdirectory(dirContents[i]); flag=true; } //如果当前文件不是子目录 else { tempFile=dirContents[i]; //flag标记tempFile是否由子目录压缩成的ZIP文件 flag = false; } System.out.println("Compress file: "+tempFile.getName()); FileInputStream fis = new FileInputStream(tempFile); origin = new BufferedInputStream(fis,BUFFER); //为被读取的文件创建压缩条目 ZipEntry entry = new ZipEntry(tempFile.getName()); byte data[]= new byte[BUFFER]; int count; //在向ZIP输出流写入数据之前,必须首先使用out.putNextEntry(entry); 方法安置压缩条目对象 out.putNextEntry(entry); //向ZIP 文件写入数据 while((count=origin.read(data,0,BUFFER))!=-1){ out.write(data,0,count); } //tempFile是临时生成的ZIP文件,删除它 if(flag==true){ flag = tempFile.delete(); System.out.println("Delete file:"+tempFile.getName()+flag); } //关闭输入流 origin.close(); } out.close(); } catch(Exception e){ System.out.println(e); } //递归返回 return zipFile; } } 来自
『玖』 请问用java编写一个压缩程序,怎样解决压缩文件zip里的文件名乱码问题!
没做过压缩程序,JAVA里面的字符串使用的编码为unicode,ZIP文件里面用的应该是本地编内码(中文容操作系统用的是GB2312)。你可以尝试着用类似这样的语句:String str = ( otherStr.getBytes("GB2312") );祝好运。
未经允许不得转载:山九号 » java中zip下载文件名乱码|用java直接读取zip类型的文件时中文乱码问题怎么解决