正在消化md5抛出UTF8错误-Java

正在消化md5抛出UTF8错误-Java,java,Java,我正在消化其他文件中一些zip文件的内容,以生成MD5。对文件内容进行摘要处理并生成MD5,而不是例如基于时间戳生成MD5。因此,我认为两个文件具有相同的内容,即使它们是在不同的时间生成的。因此,我编写了以下Java方法: public String digest( ZipInputStream entry ) throws IOException{ byte[] digest = null; MessageDigest md5 = null;

我正在消化其他文件中一些zip文件的内容,以生成MD5。对文件内容进行摘要处理并生成MD5,而不是例如基于时间戳生成MD5。因此,我认为两个文件具有相同的内容,即使它们是在不同的时间生成的。因此,我编写了以下
Java
方法:

    public String digest( ZipInputStream entry ) throws IOException{

        byte[] digest = null;
        MessageDigest md5 = null;
        String mdEnc = "";
        try {
            md5 = MessageDigest.getInstance( "MD5" );

            ZipEntry current;
            if( entry != null ) {
                while(( current = entry.getNextEntry() ) != null ) {
                    if( current.isDirectory() ) {
                        digest = this.encodeUTF8( current.getName() );
                        md5.update( digest );
                    }
                    else{
                        int size = ( int )current.getSize();
                        if(size > 0){
                            digest = new byte[ size ];
                            entry.read( digest, 0, size );
                            md5.update( digest );
                        }
                    }
                }
                digest = md5.digest();
                mdEnc = new BigInteger( 1, md5.digest() ).toString( 16 );
                entry.close();
            }
        }
        catch ( NoSuchAlgorithmException e ) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return mdEnc;
    }

         public byte[] encodeUTF8( String name ) {
             final Charset UTF8_CHARSET = Charset.forName( "UTF-8" );
                 return name.getBytes( UTF8_CHARSET );
         }
该方法一直运行良好,直到我推出了包含中文韩文日文编码的zip文件(不仅仅是传统的
UTF-8
):


有人知道如何创建一个解决方案吗?

使用Java 7,它有一个新的API-
新的ZipInputStream(InputStream,Charset)
允许您为条目名称设置字符集。

我将尝试使用
DataOutputStream
writeChars(String)
writeBytes(String)
,和
writeUTF(String)
方法,并查看这些方法对ZIP文件中的非UTF-8名称的作用。

什么方法是
this.encodeUTF8(String)
?啊,谢谢。我应该学习阅读。
Processing :mrl_l10n.zip
MD5 A: d41d8cd98f00b204e9800998ecf8427e
MD5 B: d41d8cd98f00b204e9800998ecf8427e
They Match
Processing :fcm.zip
MD5 A: d41d8cd98f00b204e9800998ecf8427e
MD5 B: d41d8cd98f00b204e9800998ecf8427e
They Match
Processing :1_mrm_root.zip
Exception in thread "main" java.lang.IllegalArgumentException
    at java.util.zip.ZipInputStream.getUTF8String(Unknown Source)
    at java.util.zip.ZipInputStream.getFileName(Unknown Source)
    at java.util.zip.ZipInputStream.readLOC(Unknown Source)
    at java.util.zip.ZipInputStream.getNextEntry(Unknown Source)
    at Tczip.digest(Tczip.java:98)
    at Tczip.execute(Tczip.java:33)