जावा 7 को यूटीएफ -8 के अलावा चरित्र सेट के साथ अनपॅकिंग ज़िप अभिलेखागार के साथ पुरानी समस्या को ठीक करना है। यह निर्माता ZipInputStream(InputStream, Charset)
द्वारा हासिल किया जा सकता है। अब तक सब ठीक है. जब मैं स्पष्ट रूप से एक आईएसओ -885 9 -1 चरित्र सेट सेट करता हूं तो मैं उन में नामों वाले फ़ाइल नाम वाले ज़िप संग्रह को अनपैक कर सकता हूं।ZipInputStream (इनपुटस्ट्रीम, चार्टसेट) डीकोड्स ZipEntry फ़ाइल नाम falsely
लेकिन यहां समस्या है: ZipInputStream.getNextEntry()
का उपयोग कर स्ट्रीम पर फिर से चलने पर, प्रविष्टियों के नाम उनके नाम गलत हैं। मेरे मामले में umlaut "ü" को "?" द्वारा प्रतिस्थापित किया गया है चरित्र, जो स्पष्ट रूप से गलत है। क्या कोई जनता है कि यह कैसे ठीक किया जाता है? जाहिर है ZipEntry
इसके अंतर्निहित ZipInputStream
के Charset
को अनदेखा करता है। ऐसा लगता है कि अभी तक एक और ज़िप-संबंधित जेडीके बग है, लेकिन मैं कुछ भी गलत कर रहा हूं।
...
zipStream = new ZipInputStream(
new BufferedInputStream(new FileInputStream(archiveFile), BUFFER_SIZE),
Charset.forName("ISO-8859-1")
);
while ((zipEntry = zipStream.getNextEntry()) != null) {
// wrong name here, something like "M?nchen" instead of "München"
System.out.println(zipEntry.getName());
...
}
जावा एसई 6 के लिए सर्वोत्तम प्रथाएं क्या हैं? (SE7 के लिए अपग्रेड करने के अलावा :) – basZero
एसई 6 के लिए: मैंने VM पैरामीटर 'zip.altEncoding' या 'zip.encoding' को' cp437' या' ISO-8859-1' पर सेट करने का परीक्षण किया, दोनों सही ढंग से पढ़ने में मदद नहीं करते – basZero
@ बेसझेरो: अपाचे कॉमन्स संपीड़न अच्छी तरह से काम करता है। हालांकि मुझे कोई आउट ऑफ़ द बॉक्स समाधान नहीं मिला। – kriegaex