- PR -

Zipファイル作成時の文字化け

1
投稿者投稿内容
さるば
会議室デビュー日: 2005/02/03
投稿数: 16
投稿日時: 2005-03-11 14:54
Zipファイルを作成する以下のようなメソッドを作っています。
圧縮するターゲットのファイル名に日本語が含まれていると、
文字化けしてしまうのですが、その回避策をご存知の方教えてください。

void createZip(File targetFile){
  try {
     zipfile = new File( zipPath + ".zip" );
     FileInputStream fis = new FileInputStream( targetFile );
     BufferedInputStream bis = new BufferedInputStream( fis );
     FileOutputStream fos = new FileOutputStream( zipfile );
     ZipOutputStream zos = new ZipOutputStream( fos );
     ZipEntry target = new ZipEntry( targetFile.getName );
     zos.putNextEntry( target );

     byte buf[] = new byte[1024];
     int count;
     while( ( count = bis.read( buf, 0, 1024 ) ) != EOF ) {
     zos.write( buf, 0, count );
     }
     bis.close();
     fis.close();
     zos.closeEntry();
     zos.close();
     fos.close();
  catch( Exception e ){

  }
}

よろしくお願いします。
フライト
ベテラン
会議室デビュー日: 2005/03/11
投稿数: 63
お住まい・勤務地: 津田沼・東京
投稿日時: 2005-03-11 17:27
javaで日本語名のファイルをzipに圧縮するとUTF8コードで
登録されてしまったような気がします。

暫定対策位にしかならないかもしれませんが、
どうしてもファイル名に日本語を使用したい場合は
jarコマンドを使用してzipファイルを作る方法とかは
どうでしょうか?

javaのjarは圧縮スキーマにZIPを使用しているので
jarコマンドでzipファイルが作成可能だったかと思います。


例)
jar -cvf [日本語ファイル名].zip [圧縮したいファイル&ディレクトリ]
coasm
大ベテラン
会議室デビュー日: 2001/11/26
投稿数: 237
投稿日時: 2005-03-11 19:44
java.util.zip パッケージを使うと、ファイル名がUTF8でエンコードされます。
これは完全に決め打ちになっていて、変更することはできません。

antに付属している org.apache.tools.zip パッケージを使えば、ファイル名の
エンコーディングを指定できるようになっているので、"MS932"とかで圧縮できた
ように記憶しています。

# 検索してみたけど資料が見つからないので、とりあえず情報のみ。
ぶんぶん
会議室デビュー日: 2003/12/11
投稿数: 17
お住まい・勤務地: 東京・品川区
投稿日時: 2005-03-11 19:51
同じ経験があります。
かなり前のことなのでちょっとあやふやですが、結局標準のライブラリでは出来なかった
ような記憶が(1年ほど前なので…)。
で、apacheが提供している?ライブラリ(ソースコードつき)を参考にした覚えがあります。
「お気に入り」には、以下のurlだけ残ってました。(先頭にhをつけて)ttp://www.cs.bris.ac.uk/Teaching/Resources/General/ant/docs/manual/api/org/apache/tools/zip/ZipFile.html
参考になれば(英語ですけど…)
coasm
大ベテラン
会議室デビュー日: 2001/11/26
投稿数: 237
投稿日時: 2005-03-11 21:26
ああっ! それです。 >ぶんぶんさん

そこにある、org.apache.tools.zip.ZipOutputStream を使えば上手くいくはずです。
使い方は標準の java.util.zip.ZipOutputStream とほとんど同じですが、
setEncodig("MS932")としておけば、ファイル名をMS漢字コードで扱ってくれます。

クラスの本体はantの中入っているので、ant.jar をそのまま使うか、ソースコードを
ダウンロードしてきて必要なところだけコンパイルするしかなかったような。

# zip関係だけ独立させて jakarta commons に置いて欲しい・・・

さるば
会議室デビュー日: 2005/02/03
投稿数: 16
投稿日時: 2005-03-14 11:20
coasmさん、ぶんぶんさん、フライトさんありがとうございます。

org.apache.tools.zip.ZipOutputStreamを使ってエンコードを指定してみたら
うまくいきました!
とても助かりました、ありがとうございます。

しかし、java.util.zip.ZipOutputStreamでなぜエンコードの指定が出来ないのか謎です。
1

スキルアップ/キャリアアップ(JOB@IT)