我现在有个下载地址
我通过这个地址去获取连接 以便获取文件流 下载下来是一个压缩文件 (zip)但是 对方可能是gbk的格式写入的
而我们现在要求已utf格式将内容写入
有如下几个疑问
1,我要在获取流写入文件的时候以 utf-8的编码写入么?
2,然后我要再读取文件的时候以utf-8的编码读取么?
3,再通过connect获得getOutputStream的时候 然后通过 ZipOutputStream 最后通过BufferedWriter写入文件
最后在读取文件的时候 用 ZipIntputStream 报错 说 只有需要一个文件实例
向大家请教了
13 个解决方案
#1
人家是GBK的你当然要用GBK的读。
#2
那么到utf-8的呢
#3
要统一一下吧,怎么一个用gbk,一个用utf-8,不然转一下吧
不管是什么格式,先转成iso-8859-1,再拼成utf-8.
new String(gbk.getByte("iso-8859-1"),"utf-8");
不管是什么格式,先转成iso-8859-1,再拼成utf-8.
new String(gbk.getByte("iso-8859-1"),"utf-8");
#4
写的时候,用UTF-8就行了,如
ZipOutputStream zos = new ZipOutputStream(new FileOutputStream("utf8.zip"));
OutputStreamWriter osw = new OutputStreamWriter(zos, "UTF-8");
ZipEntry outEntry = new ZipEntry("utf8.txt");
zos.putNextEntry(outEntry);
osw.write("中文");
osw.flush();
zos.closeEntry();
zos.close();
#5
反馈下吧 3楼 你的回答肯定是有问题的 这样的一转 肯定转出乱码来
#6
没验证过的代码我是不会贴出来的。
LZ问题如果仍未解决,不妨贴点代码我来看看。
#7
String encoding = "UTF-8";
ZipInputStream zipIn = new ZipInputStream(new FileInputStream(new File("c:/20112414092458.rar")));
BufferedReader br = new BufferedReader(new InputStreamReader(zipIn));
ZipOutputStream zipout = new ZipOutputStream(new FileOutputStream("c:/zip.rar"));
OutputStreamWriter bos =
new OutputStreamWriter(zipout, encoding);
ZipEntry outEntry = zipIn.getNextEntry();
String line = null;
while(outEntry != null){
while((line = br.readLine()) != null){
bos.write(line);
System.out.println(line);
}
zipout.putNextEntry(outEntry);
outEntry = zipIn.getNextEntry();
}
bos.flush();
zipIn.close();
br.close();
bos.close();
zipout.putNextEntry(outEntry);这行报错 什么原因?
Exception in thread "main" java.util.zip.ZipException: invalid entry size (expected 331 but got 0 bytes)
#8
Zip流是根本不存在UTF-8或者GBK的编码的,这里的编码只可能是里面的文本文件才会有
有如下几个疑问
1,我要在获取流写入文件的时候以 utf-8的编码写入么?
不应该使用任何的Reader,只能使用InputStream,所以根本不存在编码格式
2,然后我要再读取文件的时候以utf-8的编码读取么?
通过ZipInputStream,再读取里面的文件时,可以使用new InputStreamReader(zip, "UTF-8")来读取Zip文件中的文本文件(但是注意不要关闭这个Reader,只能通过zip.closeEntry()关闭
3,再通过connect获得getOutputStream的时候 然后通过 ZipOutputStream 最后通过BufferedWriter写入文件
最后在读取文件的时候 用 ZipIntputStream 报错 说 只有需要一个文件实例
如果别人提供一个下载链接,正常来说你只应调用里面的getInputStream。
总的来说,我看不明白你这个问题 ^_^,但是如果是解析别人提供的下载流,可以是
new ZipInputStream(conn.getInputStream);
然后你写入本地硬盘时就new ZipOutputStream(new FileOutputStream(...)),如果你是一个Servlet返回到浏览器,则new ZipOutputStream(response.getOutputStream());
有如下几个疑问
1,我要在获取流写入文件的时候以 utf-8的编码写入么?
不应该使用任何的Reader,只能使用InputStream,所以根本不存在编码格式
2,然后我要再读取文件的时候以utf-8的编码读取么?
通过ZipInputStream,再读取里面的文件时,可以使用new InputStreamReader(zip, "UTF-8")来读取Zip文件中的文本文件(但是注意不要关闭这个Reader,只能通过zip.closeEntry()关闭
3,再通过connect获得getOutputStream的时候 然后通过 ZipOutputStream 最后通过BufferedWriter写入文件
最后在读取文件的时候 用 ZipIntputStream 报错 说 只有需要一个文件实例
如果别人提供一个下载链接,正常来说你只应调用里面的getInputStream。
总的来说,我看不明白你这个问题 ^_^,但是如果是解析别人提供的下载流,可以是
new ZipInputStream(conn.getInputStream);
然后你写入本地硬盘时就new ZipOutputStream(new FileOutputStream(...)),如果你是一个Servlet返回到浏览器,则new ZipOutputStream(response.getOutputStream());
#9
没写过压缩包··纯属顶贴··
#10
这个错误我已经找到
zipout.putNextEntry(outEntry); 把这句写到 第一个while 后面就可以了
但是我写是写成功了 但是为什么写到一个文件中去了呢? 其他的就为空文件了
#11
bos.flush();这个必须放在while循环中,在 zipout.putNextEntry(outEntry);之前
#12
+1
#13
bos.flush();这个必须放在while循环中,在 zipout.putNextEntry(outEntry);之前
#1
人家是GBK的你当然要用GBK的读。
#2
那么到utf-8的呢
#3
要统一一下吧,怎么一个用gbk,一个用utf-8,不然转一下吧
不管是什么格式,先转成iso-8859-1,再拼成utf-8.
new String(gbk.getByte("iso-8859-1"),"utf-8");
不管是什么格式,先转成iso-8859-1,再拼成utf-8.
new String(gbk.getByte("iso-8859-1"),"utf-8");
#4
写的时候,用UTF-8就行了,如
ZipOutputStream zos = new ZipOutputStream(new FileOutputStream("utf8.zip"));
OutputStreamWriter osw = new OutputStreamWriter(zos, "UTF-8");
ZipEntry outEntry = new ZipEntry("utf8.txt");
zos.putNextEntry(outEntry);
osw.write("中文");
osw.flush();
zos.closeEntry();
zos.close();
#5
反馈下吧 3楼 你的回答肯定是有问题的 这样的一转 肯定转出乱码来
#6
没验证过的代码我是不会贴出来的。
LZ问题如果仍未解决,不妨贴点代码我来看看。
#7
String encoding = "UTF-8";
ZipInputStream zipIn = new ZipInputStream(new FileInputStream(new File("c:/20112414092458.rar")));
BufferedReader br = new BufferedReader(new InputStreamReader(zipIn));
ZipOutputStream zipout = new ZipOutputStream(new FileOutputStream("c:/zip.rar"));
OutputStreamWriter bos =
new OutputStreamWriter(zipout, encoding);
ZipEntry outEntry = zipIn.getNextEntry();
String line = null;
while(outEntry != null){
while((line = br.readLine()) != null){
bos.write(line);
System.out.println(line);
}
zipout.putNextEntry(outEntry);
outEntry = zipIn.getNextEntry();
}
bos.flush();
zipIn.close();
br.close();
bos.close();
zipout.putNextEntry(outEntry);这行报错 什么原因?
Exception in thread "main" java.util.zip.ZipException: invalid entry size (expected 331 but got 0 bytes)
#8
Zip流是根本不存在UTF-8或者GBK的编码的,这里的编码只可能是里面的文本文件才会有
有如下几个疑问
1,我要在获取流写入文件的时候以 utf-8的编码写入么?
不应该使用任何的Reader,只能使用InputStream,所以根本不存在编码格式
2,然后我要再读取文件的时候以utf-8的编码读取么?
通过ZipInputStream,再读取里面的文件时,可以使用new InputStreamReader(zip, "UTF-8")来读取Zip文件中的文本文件(但是注意不要关闭这个Reader,只能通过zip.closeEntry()关闭
3,再通过connect获得getOutputStream的时候 然后通过 ZipOutputStream 最后通过BufferedWriter写入文件
最后在读取文件的时候 用 ZipIntputStream 报错 说 只有需要一个文件实例
如果别人提供一个下载链接,正常来说你只应调用里面的getInputStream。
总的来说,我看不明白你这个问题 ^_^,但是如果是解析别人提供的下载流,可以是
new ZipInputStream(conn.getInputStream);
然后你写入本地硬盘时就new ZipOutputStream(new FileOutputStream(...)),如果你是一个Servlet返回到浏览器,则new ZipOutputStream(response.getOutputStream());
有如下几个疑问
1,我要在获取流写入文件的时候以 utf-8的编码写入么?
不应该使用任何的Reader,只能使用InputStream,所以根本不存在编码格式
2,然后我要再读取文件的时候以utf-8的编码读取么?
通过ZipInputStream,再读取里面的文件时,可以使用new InputStreamReader(zip, "UTF-8")来读取Zip文件中的文本文件(但是注意不要关闭这个Reader,只能通过zip.closeEntry()关闭
3,再通过connect获得getOutputStream的时候 然后通过 ZipOutputStream 最后通过BufferedWriter写入文件
最后在读取文件的时候 用 ZipIntputStream 报错 说 只有需要一个文件实例
如果别人提供一个下载链接,正常来说你只应调用里面的getInputStream。
总的来说,我看不明白你这个问题 ^_^,但是如果是解析别人提供的下载流,可以是
new ZipInputStream(conn.getInputStream);
然后你写入本地硬盘时就new ZipOutputStream(new FileOutputStream(...)),如果你是一个Servlet返回到浏览器,则new ZipOutputStream(response.getOutputStream());
#9
没写过压缩包··纯属顶贴··
#10
这个错误我已经找到
zipout.putNextEntry(outEntry); 把这句写到 第一个while 后面就可以了
但是我写是写成功了 但是为什么写到一个文件中去了呢? 其他的就为空文件了
#11
bos.flush();这个必须放在while循环中,在 zipout.putNextEntry(outEntry);之前
#12
+1
#13
bos.flush();这个必须放在while循环中,在 zipout.putNextEntry(outEntry);之前