`
javaEEdevelop
  • 浏览: 876446 次
  • 性别: Icon_minigender_1
  • 来自: 广州
文章分类
社区版块
存档分类
最新评论

解决java ZipInputStream 读取中文内容的乱码

 
阅读更多
package com.sinosoft.jbs.sevices.hxlife.test;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;

import org.apache.log4j.Logger;

import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;

public class Util {
	// 日志对象
	private static Logger log = Logger.getLogger(Util.class);

	/**
	 * parse zip File xml content
	 * 
	 * @param file
	 * @return
	 */
	public static String parseZIP(String file) {
		if (null != file && !"".equals(file)) {
			String suffix = file.substring(file.lastIndexOf('.') + 1, file
					.length());
			if ("zip".equals(suffix)) {
				try {
					InputStream ins = new FileInputStream(new File(file)); // URLConnection
					// .getInputStream();
					ZipInputStream zipInput = new ZipInputStream(ins);
					@SuppressWarnings("unused")
					ZipEntry zipEntry = null;
					String xml = "";// content
					BufferedReader in = null;
					while ((zipEntry = zipInput.getNextEntry()) != null) {

						/*
						 * byte[] buf = new byte[1024]; int len=-1;
						 * 
						 * while ((len=zipInput.read(buf))!=-1) { xml+=new
						 * String(buf,0,len,oscode); }
						 */
						in = new BufferedReader(new InputStreamReader(zipInput,
								"GBK"));
						StringBuffer buffer = new StringBuffer();
						String line = "";
						while ((line = in.readLine()) != null) {
							buffer.append(line);
						}
						xml = buffer.toString();
						zipInput.closeEntry();

					}
					zipInput.close();
					ins.close();
					if (in != null) {
						in.close();
					}
					return xml;

				} catch (FileNotFoundException e) {
					log.error("parse zip file FileNotFoundException:"
							+ e.getMessage());

				} catch (IOException e) {

					log.error("parse zip file IOException:" + e.getMessage());
				}
				return null;
			}
			return null;

		}
		return null;
	}

	/**
	 * parse zip Stream xml content
	 * 
	 * @param file
	 * @return
	 */
	public static String parseZIP(InputStream ins) {
		if (null != ins) {
			try {
				ZipInputStream zipInput = new ZipInputStream(ins);
				@SuppressWarnings("unused")
				ZipEntry zipEntry = null;
				String xml = "";// content
				BufferedReader in = null;
				while ((zipEntry = zipInput.getNextEntry()) != null) {

					/*
					 * byte[] buf = new byte[1024]; int len=-1;
					 * 
					 * while ((len=zipInput.read(buf))!=-1) { xml+=new
					 * String(buf,0,len,oscode); }
					 */
					in = new BufferedReader(new InputStreamReader(zipInput,
							"GBK"));
					StringBuffer buffer = new StringBuffer();
					String line = "";
					while ((line = in.readLine()) != null) {
						buffer.append(line);
					}
					xml = buffer.toString();
					zipInput.closeEntry();

				}
				zipInput.close();
				ins.close();
				if (in != null) {
					in.close();
				}
				return xml;

			} catch (FileNotFoundException e) {
				log.error("parse zip file FileNotFoundException:"
						+ e.getMessage());

			} catch (IOException e) {

				log.error("parse zip file IOException:" + e.getMessage());
			}
			return null;

		}
		return null;
	}

	/**
	 * base64 decryption
	 * 
	 * @param x
	 *            decryption message
	 * @return
	 */
	public static String base64Decoder(String x) {
		BASE64Decoder decoder = new BASE64Decoder();
		byte[] encode = null;
		try {
			encode = decoder.decodeBuffer(x);
		} catch (IOException e) {
			log.error("Decryption message error:" + e.getMessage());
			return null;
		}
		return new String(encode);

	}

	/**
	 * base64 encryption
	 * 
	 * @param x
	 *            encryption message
	 * @return
	 */
	public static String base64Encoder(String x) {
		BASE64Encoder encoder = new BASE64Encoder();
		return encoder.encode(x.getBytes());
	}
}
 
分享到:
评论

相关推荐

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

    在Java编程中,`ZipInputStream`是用于读取和解压ZIP格式的压缩文件的核心类。然而,正如标题和描述中指出的,当ZIP文件包含带有中文文件名的条目时,使用`ZipInputStream`进行解压可能会遇到问题。这个问题通常表现...

    java解决压缩中文乱码

    以下将详细阐述如何解决Java压缩中文乱码问题。 首先,我们要理解为什么会出现乱码。在Java中,`java.util.zip`类库使用的是默认的平台字符集,而不是通用的Unicode(UTF-8)编码。因此,如果源文件包含中文字符且...

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

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

    java zip压缩解压工具解决中文乱码问题

    在Java编程中,处理压缩和解压缩ZIP文件是一项常见的任务,尤其当文件中包含中文字符时,可能会遇到中文乱码的问题。这是因为Java的标准库在处理非ASCII编码时可能存在不足。本篇文章将详细介绍如何使用Java标准库...

    文件解压和压缩 解决中文乱码

    在IT行业中,文件的压缩和解压是一项...总的来说,理解和掌握文件压缩和解压的原理,以及处理中文乱码的方法,对Java开发者来说至关重要,这能够帮助他们有效地处理各种文件操作需求,尤其是涉及到多语言环境的时候。

    java解压zip时中文名称解决方法

    因此,当Java使用默认的ISO-8859-1编码读取ZIP文件时,中文文件名可能会出现乱码。 解决这个问题的关键在于正确地设置编码。以下是一些常用的方法: 1. 使用`ZipInputStream`和`ZipEntry`: Java标准库提供了`...

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

    为了解决这个问题,我们需要确保在读取ZIP文件时正确地设置字符编码。以下是一些关键步骤: 1. **设置正确的字符编码**:在创建`ZipInputStream`时,可以通过传递自定义的`Charset`对象来指定解压时使用的编码。...

    java解压支持中文

    例如,当读取ZIP文件中的中文文件名时,需要使用`java.util.zip.ZipInputStream`和`java.util.zip.ZipEntry`类,并指定UTF-8编码。 2. **Java内置API的局限性**:Java标准库中的`java.util.zip`包虽然提供了基本的...

    JAVA解压ZIP文件(可解压中文)

    当我们需要读取或提取ZIP文件中的内容,特别是在处理包含中文字符的文件名时,需要特别注意编码问题。下面将详细介绍如何使用Java来解压ZIP文件,并解决中文文件名的解压问题。 首先,Java提供了一个内置的`java....

    java实现的文件解压和压缩,没有中文编码问题

    对于解压缩,使用`ZipInputStream`来读取ZIP档案,并将其内容写入目标目录。同样,每个条目的名称也应正确解码为UTF-8。 ```java ZipInputStream zis = new ZipInputStream(new FileInputStream("archive.zip"),...

    Java处理中文文件名-压缩中文名字的文件.rar

    在不同的操作系统和文件系统中,对非ASCII字符(如中文字符)的支持方式不同,这可能导致乱码或无法正确读取文件。Java API本身提供了一些处理这种问题的方法,但需要正确理解和使用。 首先,我们要理解Java中的...

    根据java.util.zip源码修改zip支持中文

    这是因为ZIP文件格式本身是支持Unicode编码的,但是Java的标准库在处理这些文件时默认使用了ISO-8859-1编码,这可能导致中文文件名显示为乱码或无法正确解压。 标题"根据java.util.zip源码修改zip支持中文"指的是...

    安卓文件下载上传解压相关-javaandroidzip解压缩解决压缩中文乱码问题).rar

    本文将深入探讨如何使用Java在Android环境中处理这些任务,特别是解决中文文件名在压缩和解压缩过程中可能出现的乱码问题。 首先,让我们关注文件的下载和上传。在Android中,我们可以使用`java.net.URL`和`java...

    Java压缩和解压缩zip文件

    本篇文章将详细探讨如何使用Java内置的类库来实现ZIP文件的压缩和解压缩,以及解决中文文件名出现乱码的问题。 首先,我们要了解Java中处理ZIP文件的核心类:`java.util.zip.ZipOutputStream` 和 `java.util.zip....

    java压缩包解压

    本文将深入探讨如何在Java中实现解压缩功能,以及解决在处理包含中文文件名时可能出现的乱码问题。 首先,Java提供了`java.util.zip`包,它包含了处理ZIP文件的相关类。我们主要使用`ZipInputStream`和`ZipEntry`来...

    java文件解压缩工具箱及案例

    本主题将深入探讨如何使用Java来创建一个文件解压缩工具箱,特别关注支持ZIP和RAR格式,并解决中文乱码问题。首先,我们需要了解两个核心库:`java-unrar-1.7.0-1.jar` 和 `ant-1.8.2.jar`。 `java-unrar-1.7.0-1....

    java解压缩zip代码与用到的jar包

    在Java中,我们可以使用内置的`java.util.zip`包来处理ZIP文件,这个包提供了`ZipInputStream`和`ZipOutputStream`等类来读取和创建ZIP文件。然而,如果你需要处理复杂的压缩需求,如保持文件的原始权限、处理符号...

    java解压zip或rar压缩文件源码与jar包

    综上所述,这个Java接口类解决了在解压ZIP和RAR文件时可能出现的乱码问题,通过自定义的解压方法,提供了稳定且兼容的解压缩功能。开发者可以方便地在自己的项目中集成这个接口,以便处理各种压缩文件。

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

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

    java_zip压缩与解压缩(不支持中文,ant.jar包的下支持)

    然而,这个包在处理包含中文文件名的ZIP文件时存在一些问题,可能会导致乱码或无法正确读取。 `java.util.zip`包中的`ZipOutputStream`和`ZipInputStream`是主要用来处理ZIP文件的类。`ZipOutputStream`用于创建新...

Global site tag (gtag.js) - Google Analytics