Index: trunk/test/unit/org/openstreetmap/josm/data/imagery/WMTSTileSourceTest.java
===================================================================
--- trunk/test/unit/org/openstreetmap/josm/data/imagery/WMTSTileSourceTest.java	(revision 18562)
+++ trunk/test/unit/org/openstreetmap/josm/data/imagery/WMTSTileSourceTest.java	(revision 18568)
@@ -2,4 +2,5 @@
 package org.openstreetmap.josm.data.imagery;
 
+import static org.junit.jupiter.api.Assertions.assertAll;
 import static org.junit.jupiter.api.Assertions.assertDoesNotThrow;
 import static org.junit.jupiter.api.Assertions.assertEquals;
@@ -11,15 +12,25 @@
 import java.io.File;
 import java.io.IOException;
+import java.lang.reflect.Field;
 import java.net.MalformedURLException;
+import java.nio.charset.StandardCharsets;
 import java.nio.file.Files;
 import java.nio.file.Paths;
 import java.util.ArrayList;
 import java.util.Arrays;
+import java.util.Collections;
 import java.util.List;
 import java.util.concurrent.TimeUnit;
 
+import com.github.tomakehurst.wiremock.WireMockServer;
+import com.github.tomakehurst.wiremock.client.WireMock;
+import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
+import org.apache.commons.io.FileUtils;
 import org.junit.jupiter.api.Disabled;
 import org.junit.jupiter.api.Test;
 import org.junit.jupiter.api.extension.RegisterExtension;
+import org.junit.jupiter.api.io.TempDir;
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.ValueSource;
 import org.openstreetmap.gui.jmapviewer.FeatureAdapter;
 import org.openstreetmap.gui.jmapviewer.TileXY;
@@ -36,9 +47,5 @@
 import org.openstreetmap.josm.testutils.annotations.BasicPreferences;
 import org.openstreetmap.josm.testutils.annotations.BasicWiremock;
-
-import com.github.tomakehurst.wiremock.WireMockServer;
-import com.github.tomakehurst.wiremock.client.WireMock;
-
-import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
+import org.openstreetmap.josm.tools.ReflectionUtils;
 
 /**
@@ -401,5 +408,5 @@
                 )));
 
-        Config.getPref().putList("imagery.layers.sites", Arrays.asList(tileServer.url("//maps")));
+        Config.getPref().putList("imagery.layers.sites", Collections.singletonList(tileServer.url("//maps")));
         ImageryLayerInfo.instance.loadDefaults(true, null, false);
 
@@ -484,3 +491,20 @@
         }
     }
+
+    @ParameterizedTest
+    @ValueSource(strings = {"image/jpgpng", "image/png8", "image/png; mode=8bit", "image/jpeg", "image/jpg"})
+    void testSupportedMimeTypesUrlEncode(String mimeType, @TempDir File temporaryDirectory)
+            throws IOException, WMTSGetCapabilitiesException, ReflectiveOperationException {
+        final String data = FileUtils.readFileToString(new File(TestUtils.getTestDataRoot() +
+                "wmts/bug13975-multiple-tile-matrices-for-one-layer-projection.xml"), StandardCharsets.UTF_8)
+                .replace("image/jpgpng", mimeType);
+        File file = new File(temporaryDirectory, "testSupportedMimeTypes.xml");
+        FileUtils.writeStringToFile(file, data, StandardCharsets.UTF_8);
+        WMTSCapabilities capabilities = WMTSTileSource.getCapabilities(file.toURI().toURL().toExternalForm(), Collections.emptyMap());
+        assertEquals(2, capabilities.getLayers().size());
+        Field format = WMTSTileSource.Layer.class.getDeclaredField("format");
+        ReflectionUtils.setObjectsAccessible(format);
+        assertAll(capabilities.getLayers().stream().map(layer -> assertDoesNotThrow(() -> format.get(layer)))
+                        .map(layer -> () -> assertEquals(mimeType.replace(" ", "%20"), layer)));
+    }
 }
