

androidでパスワード付きのzipファイルを展開するアプリを作っているのですが日本語名が含まれるzipファイルを解凍した際日本語の含まれるファイルが文字化けしてしまいます。

どのようにすれば文字化けぜずに解凍できるようになるのかヒントになりそうなことあれば教えていただきたいです。

[code]

    import net.lingala.zip4j.core.ZipFile;
    import net.lingala.zip4j.exception.ZipException;
    import net.lingala.zip4j.model.UnzipParameters;
    
    
    public class MainActivity extends FragmentActivity {
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
    
            try {
                String zipFilePath =Environment.getExternalStorageDirectory().getPath() + "/PassZip/日本語.zip";
                String destinationPath = Environment.getExternalStorageDirectory().getPath() + "/PassZip/";
                File dir = new File(Environment.getExternalStorageDirectory().getPath() + "/PassZip/");
                if (!dir.exists()) {
                    dir.mkdir();
                }
                String password = "password";
                try {
                    ZipFile zipFile = new ZipFile(zipFilePath);
                    if (zipFile.isEncrypted()) {
                        zipFile.setFileNameCharset("csWindows31J")
                        zipFile.setPassword(password);
                    }
                    zipFile.extractAll(destinationPath);
                } catch (ZipException e) {
                    e.printStackTrace();
                }
    
            }catch (Exception e){}
        }
    }
    
[/code]


CC BY-SA 3.0
2016-05-28T16:39:45.240
25251
2021-03-07T05:10:28.253
2021-03-07T05:10:28.253
3060
13247
question
java android
androidでzip4jを使いパスワード付きzipファイルを展開したいが文字化けを起こす


以前、私がActionScriptでZipファイルを解凍するライブラリ(airxzip)を作ったときの事を参考に記述します。

まず、Zipのファイル名はUTF-8もしくは、Windows-31J(SJIS)です。  
確かファイル名の文字コードに関しては、厳密な仕様はなかったと思います。

また、UTF-8がやっかいで、WindowsとMACで濁点などの考え方が違うのでこの当たりを制御しないと文字化けがおきます。  
（MACで日本語がよく文字化けしている理由がそれです）

Javaではありませんが、以下のgetFilenameUTF8というメソッドがUTF-8のデコードをしている処理です。

<https://github.com/coltware/airxzip/blob/master/airxzip/src/com/coltware/airxzip/ZipHeader.as>

おおよそ、これで問題になったケースはなかったので大丈夫だとは思います。


CC BY-SA 3.0
2016-06-20T16:09:21.717
26900
2016-06-20T16:09:21.717
9983
25251
answer