我正在使用以下方法将文件压缩成zip文件:
import java.util.zip.CRC32;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;
public static void doZip(final File inputfis, final File outputfis) throws IOException {
FileInputStream fis = null;
FileOutputStream fos = null;
final CRC32 crc = new CRC32();
crc.reset();
try {
fis = new FileInputStream(inputfis);
fos = new FileOutputStream(outputfis);
final ZipOutputStream zos = new ZipOutputStream(fos);
zos.setLevel(6);
final ZipEntry ze = new ZipEntry(inputfis.getName());
zos.putNextEntry(ze);
final int BUFSIZ = 8192;
final byte inbuf[] = new byte[BUFSIZ];
int n;
while ((n = fis.read(inbuf)) != -1) {
zos.write(inbuf, 0, n);
crc.update(inbuf);
}
ze.setCrc(crc.getValue());
zos.finish();
zos.close();
} catch (final IOException e) {
throw e;
} finally {
if (fis != null) {
fis.close();
}
if (fos != null) {
fos.close();
}
}
}
我的问题是,我有一些平面文本文件,其中包含内容 N°TICKET
,例如,压缩后解压缩的结果会出现一些奇怪的字符 N° TICKET
。另外,像 é
和 à
这样的字符也不被支持。
我猜这是由于字符编码导致的,但我不知道如何在我的 zip 方法中设置它为 ISO-8859-1
?
(我正在运行 Windows 7,Java 6)
Charset.forName("ISO-8859-1")
添加到我的输出写入器中解决了这个问题(Excel显示了正确的值)。 - Majid Laissi