comment ouvrir un programme en java fichier zip généré en utilisant l'encodage UTF-8
Notre produit possède une fonction d'exportation, qui utilise ZipOutputStream
pour compresser un répertoire; toutefois, lorsque vous essayez de compresser un répertoire qui contient les noms de fichiers avec les Chinois ou les Japonais de caractère à l'exportation ne fonctionne pas correctement. Pour une raison quelconque, les nouveaux fichiers dans le fichier zip sont nommés différemment. Voici un exemple de nos compression code:
ZipOutputStream out = new ZipOutputStream(new FileOutputStream(zipFileName));
out.setEncoding("UTF-8");
//program to add directory to zip
//program add/create file to zip
out.close();
Mon algorithme d'importation, également construit en Java, pouvez importer le fichier zippé correctement, même si elle contient des Chinois/Japonais caractères dans les noms de fichiers.
Zipfile zipfile = new ZipFile(zipPath, "UTF-8");
Enumeration e = zipFile.getEntries();
while (e.hasMoreElements()) {
entry = (ZipEntry) e.nextElement();
String name = entry.getName();
....
Est le logiciel zip du programme de la difficulté de décompression de la codé en UTF-8 fichiers, ou est-il quelque chose de spécial pour créer un fichier zip qui peut être facilement utilisé par les logiciels existants en utilisant l'encodage utf-8??
J'ai écrit un programme exemple:
package ZipFile;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import org.apache.tools.zip.ZipEntry;
import org.apache.tools.zip.ZipOutputStream;
public class ZipFolder{
public static void main(String[] a) throws Exception
{
String srcFolder = "D:/9.4_work/openscript_repo/中文124.All/中文";
String destZipFile = "D:/Eclipse_Projects/OpenScriptDebuggingProject/src/ZipFile/demo.zip";
zipFolder(srcFolder, destZipFile);
}
static public void zipFolder(String srcFolder, String destZipFile) throws Exception
{
ZipOutputStream zip = null;
FileOutputStream fileWriter = null;
fileWriter = new FileOutputStream(destZipFile);
zip = new ZipOutputStream(fileWriter);
zip.setEncoding("UTF-8");
//using GBK encoding, the chinese name can be correctly displayed when unzip
//zip.setEncoding("GBK");
addFolderToZip("", srcFolder, zip);
zip.flush();
zip.close();
}
static private void addFileToZip(String path, String srcFile, ZipOutputStream zip) throws Exception
{
File folder = new File(srcFile);
if (folder.isDirectory()) {
addFolderToZip(path, srcFile, zip);
}
else {
byte[] buf = new byte[1024];
int len;
FileInputStream in = new FileInputStream(srcFile);
zip.putNextEntry(new ZipEntry(path + "/" + folder.getName()));
while ((len = in.read(buf)) > 0) {
zip.write(buf, 0, len);
}
}
}
static private void addFolderToZip(String path, String srcFolder, ZipOutputStream zip) throws Exception
{
File folder = new File(srcFolder);
for (String fileName : folder.list()) {
if (path.equals("")) {
addFileToZip(folder.getName(), srcFolder + "/" + fileName, zip);
}
else {
addFileToZip(path + "/" + folder.getName(), srcFolder + "/" + fileName, zip);
}
}
}
}
ZipOutputStream
classe est-ce? java.util.zip.ZipOutputStream
n'a pas de setEncoding
méthode.Dans mon système windows 7, si j'utilise ".setEncoding("GBK"); " le fichier zip généré peut être correctement ouvert avec le nom Chinois correctement affiché par 7zip.
org.apache.outils.zip.ZipOutputStream; java.util.zip.ZipOutputStream semble ne pas avoir de support d'encodage
Je sais que la compression zip ne se soucie pas de l'encodage du contenu, mais zip poignées de codage sur nom de fichier et le dir nom, et mes problèmes avec nom lors de la décompression, pas le contenu.
Ah ok, j'avais pas compris que c'était sur les noms de fichiers plutôt que le contenu. Maintenant, je comprends.
OriginalL'auteur Ben Xu | 2011-06-07
Vous devez vous connecter pour publier un commentaire.
Le haut de réponse ici peut répondre à votre question; malheureusement, il semble suggérer que le format Zip ne permet pas vraiment pour la création d'un fichier Zip qui permettra d'afficher les noms de fichiers correctement sur n'importe quel ordinateur:
https://superuser.com/questions/60379/linux-zip-tgz-filenames-encoding-problem
J'attends qu'il fonctionne lorsque vous définissez l'encodage GBK, parce que c'est par défaut de votre système d'encodage et donc 7zip est en utilisant que pour tous les fichiers zip il s'ouvre.
Il suggère que
rar
et7z
formats ont un meilleur soutien.J'ai trouvé un billet de blog spécifique sur UTF-8 dans les zips avec Java. Il suggère une nouvelle version de la ZIP spécification de la version actuelle de Java peut ne pas être de la création, mais Java 7 ne. Je ne sais pas si l'Apache classes de l'utilisation de cette trop.
http://blogs.oracle.com/xuemingshen/entry/non_utf_8_encoding_in
OriginalL'auteur Nick
La suivante classe utilitaire permet de compresser et décompresser des chaînes à l'aide de l'algorithme de compression GZIP. Cela peut être utile si vous souhaitez enregistrer les longues chaînes dans une base de données par exemple.
Ici est un cas de test qui fournit des exemples d'utilisation de la classe ci-dessus:
OriginalL'auteur sathish