- PR -

zipファイルを文字化けせずに作る方法

投稿者投稿内容
R-55
常連さん
会議室デビュー日: 2003/03/13
投稿数: 29
投稿日時: 2003-08-12 18:17
引用:
お犬様さんの書き込み(2003-08-12 18:07)より

単に UTF-16LE で出力なさっているだけだと思います。UTF-16BE と指定すれば上位バイトと下位バイトが入れ替わる事は無いと思います。


試してみると正にその通りでした。
どうもありがとうございました。
未記入
会議室デビュー日: 2004/03/24
投稿数: 3
投稿日時: 2004-03-24 18:00
みなさまの書き込みを参考にさせていただいています。
onokeさんのソースをもとにお犬様のご指示通り
サンプルを下記のように作ったのですが
文字化けがなおりません。いろいろ試したのですが
うまくいかずご教授いただけないでしょうか?
よろしくお願いします。

−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−

import java.io.*;
import java.util.*;
import java.util.zip.*;

public class ZipTest{
public static void main( String[] args ){
try{
FileOutputStream f = new FileOutputStream( "ziptest.zip" );
ZipOutputStream z = new ZipOutputStream( f );
FileInputStream fin = null;

↓コメントにしました
//BufferedReader in = null;
for( int i=0; i<args.length; i++ ){
System.out.println( "Writing file " + args[i] );
fin = new FileInputStream( args[i] );

↓コメントにしました
//in = new BufferedReader( new InputStreamReader( fin, "SJIS" ));
z.putNextEntry( new ZipEntry( args[i] ) );
int c;

↓inからfinにしました
while((c=fin.read()) != -1 ){
z.write( c );
}

↓コメントにしました
in.close();
}

z.close();
f.close();
}catch( Exception e ){
e.printStackTrace();
}
}
}


xucker
会議室デビュー日: 2004/03/24
投稿数: 2
投稿日時: 2004-03-24 18:59
私も最近までzipファイルの日本語文字化けに悩んでいました。
すこし論点とはずれますが
org.apache.tools.zip.ZipFile (Ant1.6.1にも入ってます)
を使うとうまくいきました。
ソースコードも公開されていますので何かの参考になるかもしれません。
未記入
会議室デビュー日: 2004/03/24
投稿数: 3
投稿日時: 2004-03-24 19:35
xucker様 ありがとうございます。
私も今気づいたのですがzipファイルの
中のファイルに記述された日本語ではなく
zipファイルに含めたファイル名が
日本語だと化けるのでファイル名の
日本語対応方法を探しています。
もしご存じでしたらご教授いただけますでしょうか。
よろしくお願いいたします。
SJ0392
ベテラン
会議室デビュー日: 2004/02/05
投稿数: 62
お住まい・勤務地: 神奈川・横浜
投稿日時: 2004-03-24 20:56
引用:

未記入さんの書き込み (2004-03-24 19:35) より:
zipファイルに含めたファイル名が日本語だと化けるのでファイル名の日本語対応方法を探しています。


Javaのバージョンが不明なので回答に困りますが・・・。
先人達の努力を無駄にしないで検索しましょう。
http://java-house.jp/ml/archive/j-h-b/026764.html#body
http://java-house.jp/ml/archive/j-h-b/026765.html#body

この情報は、JavaHouse の Topics にしっかりとリンクされてます。
未記入
会議室デビュー日: 2004/03/24
投稿数: 3
投稿日時: 2004-03-25 09:40
SJ0392さんレスありがとうございます

javaのヴァージョンは1.3.1です。
ちなみにリンク先のプログラムも実行しましたが
日本語は化けてしまいます。
やはりApachのソースを利用するしかないのでしょうか?
利用すれば対応できるのでしょうか?
SJ0392
ベテラン
会議室デビュー日: 2004/02/05
投稿数: 62
お住まい・勤務地: 神奈川・横浜
投稿日時: 2004-03-25 22:01
windows2000環境にて ZIPの圧縮と展開を続けて行うプログラムを作成し実行してみました。
未記入 さんの回答になりませんが、自作したものは jdk1.3.1_09 で成功。
他に
jdk1.1.8_10 では展開ファイル名は文字化け。
jdk1.4.1 では展開ファイル名は正常。

以下参考まで・・・。(関連しそうな部分以外かなり情報削りました)

圧縮時の ZipEntry 関連部分
コード:
ZipOutputStream zos = new ZipOutputStream(xxx);
zos.setLevel(9);
ZipEntry ze = new ZipEntry(new File(plain_file).toString());
ze.setMethod(ZipEntry.DEFLATED);
zos.putNextEntry(ze);
zos.closeEntry();
zos.flush();



展開時の ZipEntry 関連部分
コード:
private void execUncompress(ZipFile zf){
  Enumeration enum = zf.entries();
  ZipEntry ze = (ZipEntry)enum.nextElement();
  String orgName = ze.getName();
  fos = new FileOutputStream("_"+ orgName);  // "_" は元ファイルを上書きさせないため
}



ちなみに、これらの情報は google で検索して見つけた情報を元に作成しました。
結局 jdk1.1 では「ASCIIの範囲の文字しか扱えない」、jdk1.2 では「Unicodeの任意の文字が扱える」という事なんでしょう。
JW
常連さん
会議室デビュー日: 2004/01/14
投稿数: 49
投稿日時: 2004-03-26 10:42
質問者が、単に「文字化けする」としか表現していないから
ややこしくなっているような気がします。

未記入さんは何を見て「文字化けしている」と言っていますか?
(1)Javaで作ったzipファイルが、Javaで作られたプログラムで
展開しようとしても化けている。
(jar -tvf xxx.zip などで確認)
(2)Javaで作ったzipファイルが、一般の圧縮解凍ツールで中を
見ると化ける(化けているように見える)。
とでは、意味が違うので。

(1)はありえないので、そういう状況であればプログラムが悪い
のでしょう。
(2)であれば、SJ0392さんの示したJavaHouseの過去の投稿に、
しっかりとそういうものだという趣旨のことが書かれています。

ちなみに、上記の話は標準API(java.util.zip.*) を使った場合
の話であり、xuckerさんの書かれているように標準APIでは無い
ものであれば対応可能なものもあります。
(その場合、上記(1)のようにjarコマンドを使った確認では
文字化けすることになりますが)
引用:

やはりApachのソースを利用するしかないのでしょうか?
利用すれば対応できるのでしょうか?


と聞く前に、情報は示されているのでgoogle等でキーワードに
「org.apache.tools.zip.ZipFile」と入れて検索したほうが
いちいち聞きなおすより早い場合があります。
まさしくSJ0392さんの言うように、先人の知恵を(以下略)です。

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