Как загрузить ресурс JAR с именами файлов, включая умлауты?

Я работаю над Java Webstart Application. Предполагается собрать ресурсы из файла JAR, который включен в раздел ресурсов в файле JNLP.

Язык приложения - немецкий, поэтому некоторые из папок/файлов в JAR включают символы "ä", "ö", "ü" или "ß". Если я запустил это приложение, выдается следующее исключение:

java.lang.IllegalArgumentException: MALFORMED
at java.util.zip.ZipCoder.toString(Unknown Source)
at java.util.zip.ZipInputStream.readLOC(Unknown Source)
at java.util.zip.ZipInputStream.getNextEntry(Unknown Source)
at com.sun.deploy.net.HttpDownloadHelper.decompressWrite(Unknown Source)
at com.sun.deploy.net.HttpDownloadHelper.download(Unknown Source)
at com.sun.deploy.cache.Cache.downloadResourceToTempFile(Unknown Source)
at com.sun.deploy.cache.Cache.downloadResourceToCache(Unknown Source)
at com.sun.deploy.net.DownloadEngine.actionDownload(Unknown Source)
at com.sun.deploy.net.DownloadEngine.getCacheEntry(Unknown Source)
at com.sun.deploy.net.DownloadEngine.getCacheEntry(Unknown Source)
at com.sun.deploy.net.DownloadEngine.getResourceCacheEntry(Unknown Source)
at com.sun.deploy.net.DownloadEngine.getResourceCacheEntry(Unknown Source)
at com.sun.deploy.net.DownloadEngine.getResource(Unknown Source)
at com.sun.javaws.LaunchDownload$DownloadTask.call(Unknown Source)
at java.util.concurrent.FutureTask$Sync.innerRun(Unknown Source)
at java.util.concurrent.FutureTask.run(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)

Если я открою JAR файл в блокноте ++, говорит, что кодировка ANSI. Итак, я меняю его на UTF-8, но потом он даже не компилируется.

Я использую Netbeans 7.2. Для разработки я включаю JAR файл в качестве библиотеки и таким образом он указан в разделе ресурсов.

Ответ 1

Теперь я использовал инструмент JAR из JDK, как этот

jar cf <jar-file-name> <input-file(s)>

и он работал нормально.

Я не совсем понимаю, почему это работает, потому что кодирование созданного JAR файла по-прежнему ANSI.