karino2 / karino2.github.io

This site is auto generated from issues.
7 stars 2 forks source link

Android Nougat以降で日本語フォルダ名を含むZipFile #216

Open karino2 opened 6 years ago

karino2 commented 6 years ago

Android のNから、ZipFileのentriesなどでZipEntryを取得する時に、 Windows環境で日本語のフォルダ名を含む状態でExplorerなどから作ったzipなどだと、

IllegalArgumentException: MALFORMED

などというExceptionが上がるようになってしまった。 ZipFileのコンストラクタにCharsetが追加されて、この影響でデフォルトがUTF8になったせいっぽい。

Stackoverflow: Unzipping a file with special characters in filenames from API24 upward

Cp932とかCp942を指定したらUnsupported Charsetだとかいうruntime exceptionが上がってきた。 とりあえずCp437を指定したら動いたが、 このエンコーディングをAndroidのどの環境がサポートしているかはよくわからない。

まぁどっちにしろもとのコードでもIlegalArgumentExceptionは上がるのだから、 とりあえずNよりあとの場合、1つ目のzipエントリを取り出してみてexceptionだったらCp437を指定する、 というコードを足しておく。