如何使用文件名(包括变音符号)加载资源JAR?

Wil*_*zel 10 java encoding jar java-web-start

我正在开发Java Webstart应用程序.这应该从JNLP文件的资源部分中包含的JAR文件中收集资源.

应用程序语言是德语,因此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)
Run Code Online (Sandbox Code Playgroud)

如果我在notepad ++中打开JAR文件,则说编码是ANSI.所以,我将它改为UTF-8,但它甚至没有编译.

我正在使用Netbeans 7.2.对于开发,我将JAR文件包含为库,这样它在资源部分中列出.

Wil*_*zel 2

我现在使用JDK 中的JAR 工具,如下所示

jar cf <jar-file-name> <input-file(s)>
Run Code Online (Sandbox Code Playgroud)

效果很好。

我不太明白它为什么有效,因为生成的 JAR 文件的编码仍然是 ANSI。