jar.exe的encode問題

來源:互聯網
上載者:User
— 作者 wonder @ 05:38

 

 

 

 

說起來我好像和小型機有仇,今天晚上更新程式死活也更新不上去,這個hpux11i真實麻煩。大多數ftp程式都不好用,後來只能用jar打包,打完後把程式放到hpux上用jar解壓縮,見鬼,這都能出問題,結果報了一個異常。java.util.zip.ZipInputStream.getUTF8String(ZipInputStream.java:298),唉咋辦,上網查了查,發現居然是sun的一個bug,而且六年都沒有改了,TNND,sun你就不能勤快點啊。

沒辦法,只能試了試,結果發現只要在同一個平台就沒有問題,後來估計是平台的encode的問題,不過沒找到在什麼地方設定。解決辦法:在windows下用jar壓縮一個jar檔案,然後用windows的ftp工具把這個檔案傳到hpux上,然後再在windows下用telnet工具串連到hpux上,執行jar xvf就好用了。

最後再鄙視一下sun的懶惰!

 

Bug ID:4820807

 
Votes 9
Synopsis java.util.zip.ZipInputStream cannot extract files with Chinese chars in name
Category java:classes_util_jarzip
Reported Against 1.2.1 , 1.4.1 , tiger
Release Fixed  
State In progress, request for enhancement
Related Bugs 4885817 , 4244499
Submit Date 19-FEB-2003
Description
FULL PRODUCT VERSION :java version "1.4.1"Java(TM) 2 Runtime Environment, Standard Edition (build 1.4.1-b21)Java HotSpot(TM) Client VM (build 1.4.1-b21, mixed mode)FULL OPERATING SYSTEM VERSION :Microsoft Windows 2000 [Version 5.00.2195]Service Pack 3A DESCRIPTION OF THE PROBLEM :If ZipInputStream is used to read a zip file containing oneor more files with Chinese, Japanese or Korean names, thegetNextEntry method throws an IllegalArgumentException.STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :1. Create a zip file containing at least one file with aChinese, Japanese or Korean filename.2. Try to read using a ZipInputStream.EXPECTED VERSUS ACTUAL BEHAVIOR :Should return a valid entry with the correct filenameinstead of throwing an exception.ERROR MESSAGES/STACK TRACES THAT OCCUR :java.lang.IllegalArgumentException    at java.util.zip.ZipInputStream.getUTF8String(ZipInputStream.java:291)    at java.util.zip.ZipInputStream.readLOC(ZipInputStream.java:230)    at java.util.zip.ZipInputStream.getNextEntry(ZipInputStream.java:75)REPRODUCIBILITY :This bug can be reproduced always.---------- BEGIN SOURCE ----------import java.io.FileInputStream;import java.io.IOException;import java.util.zip.ZipEntry;import java.util.zip.ZipInputStream;public final class TestCase {    public static void main(String[] args) throws IOException {        ZipInputStream zis = new ZipInputStream(new FileInputStream("myfile.zip"));        ZipEntry entry;        while ((entry = zis.getNextEntry()) != null) {            System.out.println("found " + entry.getName());        }    }}---------- END SOURCE ----------CUSTOMER WORKAROUND :Do not use CJK filenames in zip files.(Review ID: 181382) ====================================================================== xxxxx@xxxxx  2003-09-02Same problem reported by a CAP member from Germany:J2SE Version (please include all output from java -version flag):  java version "1.4.1"  Java(TM) 2 Runtime Environment, Standard Edition (build 1.4.1-b21)  Java HotSpot(TM) Client VM (build 1.4.1-b21, mixed mode)and  java version "1.5.0-beta"  Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0-beta-b16)  Java HotSpot(TM) Client VM (build 1.5.0-beta-b16, mixed mode)Does this problem occur on J2SE 1.3, 1.4 or 1.4.1?  Yes / No (pick one)  YesOperating System Configuration Information (be specific):  English Linux and German Win2KBug Description:  A ZIP file with entries that contain german umlauts. When read  read these entries using ZipInputStream.getNextEntry() it throws an   IllegalArgumentException at:Exception in thread "main" java.lang.IllegalArgumentException         at java.util.zip.ZipInputStream.getUTF8String(ZipInputStream.java:298)         at java.util.zip.ZipInputStream.readLOC(ZipInputStream.java:237)         at java.util.zip.ZipInputStream.getNextEntry(ZipInputStream.java:73)         at ZipUmlauts.main(ZipUmlauts.java:22)  It would be better, if the getUTF8String() method would just ignore   these "illegal" characters or add them "as-is".Test Program: (ZipUmlauts.java umlauts.zip)-------------import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.IOException;import java.util.zip.ZipEntry;import java.util.zip.ZipInputStream;/* *  ZipUmlauts.java created on Sep 1, 2003 8:45:08 AM *//** * @version ${Id:} * @author rs * @since pirobaseCB 1.0 */public final class ZipUmlauts {    public static void main(String[] args) throws IOException {        FileInputStream fis=new FileInputStream("umlauts.zip");        ZipInputStream zis=new ZipInputStream(fis);        ZipEntry ze;        while ((ze=zis.getNextEntry())!=null) {            System.out.println(ze.getName());        }    }}
Work Around
N/A
Evaluation
Unfortunately, fixing this in a backward-compatible way may be impossible.At least, for non-ASCII file names, Java should be able to create fileson one system and extract them on a different system, even if theencodings are different.The suggestion of adding an encoding attribute is a good one.That should have been done when the decision to encode file namesin UTF-8 was first made. xxxxx@xxxxx  2003-09-04I have confirmed that, as long as one uses Sun's J2SE zipimplementation consistently, in a environment where file.encodingsupports the character set of interest,that one can create, list and extractjar/zip files containing non-ASCII characters (including Chinesecharacters) correctly.   Other zip implementations also havecharacter encoding interoperability problems, so J2SE'simplementation is not alone.The suggestion of falling back to file.encoding is an appealing one,but it's quite dangerous to go down that route.Encoding "autodetection" is a good interactive feature for users, butit's not so good for file formats.  To have a file be properly readabledepending fairly randomly on the data bit patterns stored within itis a reliability disaster.  It's much better to have consistent failurethan intermittent "success".Re-architecting zip to record the encoding of the file names willhopefully get done for J2SE 1.6. xxxxx@xxxxx  2003-11-25I believe this is a duplicate of 4244499. See the evaluation of that bug report for a relatively simple proposed solution. xxxxx@xxxxx  2005-1-29 00:28:38 GMT

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.