Default style (Cherry Eve). Switch styles (Capricorn). XML Feed Calendar
全部分类 | CAPS | family | General | Java | sourceforge
20040702 星期五 2004年07月02日

ZipInputStream不能正确处理中文文件名

java的java.uti.zip包中,对中文文件名的处理都是按照Unicode的方式去处理的 它内部在取ZipInputStream.getNextEntry()时是调用的getUTF8String()取文件名。 因此如果压缩包中的文件名是非unicode编码的,则不可避免的回抛出异常 IllegalArgumentException
而就目前所知: winRAR、winzip等压缩软件都是将中文文件名按照GBK进行的编码,因此会出现这样的错误。

说来也有趣,本来这里写的就是java.util.zip关于中文的的问题,结果它自己也是有中文的问题。 归根到底还是unicode没有成为大家通用的缺省的字符集。


昨天不用utf-8的encoding,还是乱码,今天就好了。 在今天的header中有如下:
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
最后发现,是在自己的settings中,可以自己修改各个header、footer、css等,只需在header中将utf-8设置好即可。

应cytihuntor要求,把我的理解描述一下,也不知是否正确:
在Setting->Themms先设置自己的theme.
然后在Pages中分别选择_header和Weblog,看起header中有无以下类似的,没有则自己添加:
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
七月 02, 2004 03:32 下午 GMT+08:00 Permalink

评论:

关于设置字符集,我在setting中找了半天没找到你说的在哪设,可否明示 另外,我自己在本地用roller建了一个blog站点,但不知怎么日期头部分总是乱码  就是 July .... 2004 显示总是????? 2004 可否知道怎么回事,谢谢 最后发现,是在自己的settings中,可以自己修改各个header、footer、css等,只需在header中将utf-8设置好即可。

发表于 cytihuntor 在 2004年07月03日, 03:14 下午 GMT+08:00 #

谢谢shi lei,已经搞定。 但好象roller的themes定位有点问题,通过它自己的编辑weblog选项提交后没有保存,不过这没有问题,我可以直接改它的文件。 它对回车什么的处理有问题,刚才看到上次提交的东西乱七八糟的.

发表于 cytihuntor 在 2004年07月05日, 10:08 上午 GMT+08:00 #

它把回车都过滤掉了,是不是直接粘贴就没问题了

发表于 cytihuntor 在 2004年07月05日, 10:09 上午 GMT+08:00 #

不好意思,想到什么说什么,一点一点往出挤 关于中文问题,基本已经解决,但前面说日期显示乱码仍然没有解决。我看了他的源码,日期显示部分是一个tag,好象没有看出什么问题。很奇怪,为什么单独日期显示会有问题呢,可能是跟我用的系统有关。我想你一定很忙,不过如果有什么想法可以提示我一下。 我用的系统是 中文2000 professional + tomcat5 + mysql4.0.20, 我用他的源码测试了一下,在我的系统console上显示的日期是 七月 2004,我想是不是因为我的系统是中文的原因 现在在编辑器里写了上面文字,顺便试一下回车问题是不是可以解决

发表于 cytihuntor 在 2004年07月05日, 10:18 上午 GMT+08:00 #

抱歉,没在本机装过roller,不清楚你说的日期问题指的是哪个?
另外你指的回车又指的什么?

发表于 shilei 在 2004年07月05日, 11:09 下午 GMT+08:00 #

日期问题,就是说在界面上显示的日期,比如说你看到的是 July 5,2004,但在我这是 ???? 5,2004 回车问题,是说你看我所有的回帖显示都没有换行,实际上我写的时候是有换行的,但提交后就没啦,你的帖子怎么就没有这个问题。
a

发表于 cytihuntor 在 2004年07月06日, 09:33 上午 GMT+08:00 #

回车你用
隔开就可以了,这是html的标准标签。
例如你用显示下面两行:
行1
行2
需要写下面两行:
<br>行1
<br>行2
抱歉,日期问题不清楚,应该还是java的locale的问题

发表于 shilei 在 2004年07月06日, 10:11 下午 GMT+08:00 #

thanks.

发表于 cytihuntor 在 2004年07月07日, 01:08 下午 GMT+08:00 #

FileOutputStream f = new FileOutputStream(z) ; CheckedOutputStream csum = new CheckedOutputStream(f , new Adler32()) ; ZipOutputStream zos = new ZipOutputStream(csum) ; FileInputStream in = new FileInputStream(filename); zos.putNextEntry(new ZipEntry("中文.txt")) ; int c ; while((c=in.read())!=-1) zos.write(c) ; in.close(); 我这样的生成的压缩文件里的文件名是乱码怎么办?

发表于 猫呜 在 2004年07月29日, 01:13 下午 GMT+08:00 #

在 WEB-INF\velocity.properties 中 追加: # set encoding/charset to UTF-8 input.encoding=UTF-8 output.encoding=UTF-8 default.contentType=text/html; charset=utf-8

发表于 北风 在 2004年10月06日, 12:02 上午 GMT+08:00 #

发表一条评论:

该日志评论功能被禁用了。