Index: src/java/org/apache/xmlgraphics/image/loader/impl/AbstractImageSessionContext.java
===================================================================
--- src/java/org/apache/xmlgraphics/image/loader/impl/AbstractImageSessionContext.java	(revision 784103)
+++ src/java/org/apache/xmlgraphics/image/loader/impl/AbstractImageSessionContext.java	Tue Jun 30 12:12:41 CEST 2009
@@ -241,28 +241,26 @@
         if (url == null || !url.getProtocol().equals("file")) {
             return null;
         } else {
+            try {
-            String filename = "";
-            if (url.getHost() != null) {
-                filename += Character.toString(File.separatorChar)
-                        + Character.toString(File.separatorChar)
-                        + url.getHost();
-            }
-            filename += url.getFile().replace('/', File.separatorChar);
+                String filename = "";
+                if (url.getHost() != null) {
+                    filename += Character.toString(File.separatorChar)
+                            + Character.toString(File.separatorChar)
+                            + url.getHost();
+                }
+                filename += url.getFile().replace('/', File.separatorChar);
-            int pos = 0;
-            while ((pos = filename.indexOf('%', pos)) >= 0) {
-                if (pos + 2 < filename.length()) {
-                    String hexStr = filename.substring(pos + 1, pos + 3);
-                    char ch = (char) Integer.parseInt(hexStr, 16);
-                    filename = filename.substring(0, pos) + ch + filename.substring(pos + 3);
-                }
-            }
+                filename = java.net.URLDecoder.decode(filename, "UTF-8");
-            final File f = new File(filename);
-            if (!f.isFile()) {
-                return null;
-            }
-            return f;
+                final File f = new File(filename);
+                if (!f.isFile()) {
+                    return null;
+                }
+                return f;
+            } catch (java.io.UnsupportedEncodingException uee) {
+                assert false;
+                return null;
-        }
-    }
+            }
+        }
+    }
 
     private SoftMapCache sessionSources = new SoftMapCache(false); //no need for synchronization
 
