- - PR -
Zipファイル作成時の文字化け
1
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 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 17:27
javaで日本語名のファイルをzipに圧縮するとUTF8コードで
登録されてしまったような気がします。 暫定対策位にしかならないかもしれませんが、 どうしてもファイル名に日本語を使用したい場合は jarコマンドを使用してzipファイルを作る方法とかは どうでしょうか? javaのjarは圧縮スキーマにZIPを使用しているので jarコマンドでzipファイルが作成可能だったかと思います。 例) jar -cvf [日本語ファイル名].zip [圧縮したいファイル&ディレクトリ] |
|
投稿日時: 2005-03-11 19:44
java.util.zip パッケージを使うと、ファイル名がUTF8でエンコードされます。
これは完全に決め打ちになっていて、変更することはできません。 antに付属している org.apache.tools.zip パッケージを使えば、ファイル名の エンコーディングを指定できるようになっているので、"MS932"とかで圧縮できた ように記憶しています。 # 検索してみたけど資料が見つからないので、とりあえず情報のみ。 |
|
投稿日時: 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 参考になれば(英語ですけど…) |
|
投稿日時: 2005-03-11 21:26
ああっ! それです。 >ぶんぶんさん
そこにある、org.apache.tools.zip.ZipOutputStream を使えば上手くいくはずです。 使い方は標準の java.util.zip.ZipOutputStream とほとんど同じですが、 setEncodig("MS932")としておけば、ファイル名をMS漢字コードで扱ってくれます。 クラスの本体はantの中入っているので、ant.jar をそのまま使うか、ソースコードを ダウンロードしてきて必要なところだけコンパイルするしかなかったような。 # zip関係だけ独立させて jakarta commons に置いて欲しい・・・ |
|
投稿日時: 2005-03-14 11:20
coasmさん、ぶんぶんさん、フライトさんありがとうございます。
org.apache.tools.zip.ZipOutputStreamを使ってエンコードを指定してみたら うまくいきました! とても助かりました、ありがとうございます。 しかし、java.util.zip.ZipOutputStreamでなぜエンコードの指定が出来ないのか謎です。 |
1