You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@wicket.apache.org by sv...@apache.org on 2020/04/27 16:29:53 UTC

[wicket] branch master updated: WICKET-6772 Use StandardCharsets.UTF_8 instead of looking up charsets

This is an automated email from the ASF dual-hosted git repository.

svenmeier pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/wicket.git


The following commit(s) were added to refs/heads/master by this push:
     new 7afa921  WICKET-6772 Use StandardCharsets.UTF_8 instead of looking up charsets
7afa921 is described below

commit 7afa9211b6efe88beec0a9b9a38639cd48f0ca72
Author: Thomas Heigl <th...@gmail.com>
AuthorDate: Mon Apr 27 18:13:04 2020 +0200

    WICKET-6772 Use StandardCharsets.UTF_8 instead of looking up charsets
    
    this closes #421
---
 .../org/apache/wicket/mock/MockWebRequest.java     |  3 +-
 .../apache/wicket/protocol/http/RequestUtils.java  |  6 ++--
 .../apache/wicket/ajax/AjaxRequestHandlerTest.java |  3 +-
 .../core/request/mapper/AbstractMapperTest.java    |  3 +-
 .../request/mapper/BookmarkableMapperTest.java     |  7 ++--
 .../request/mapper/PageInstanceMapperTest.java     |  5 +--
 .../core/request/mapper/ResourceMapperTest.java    |  3 +-
 .../markup/parser/filter/CustomMarkupLabel.java    |  3 +-
 .../wicket/protocol/http/RequestUtilsTest.java     |  7 ++--
 .../apache/wicket/protocol/http/WicketURLTest.java | 18 ++++++-----
 .../request/resource/CharSequenceResourceTest.java |  5 +--
 .../ContextRelativeResourceCachingTest.java        |  3 +-
 .../main/java/org/apache/wicket/request/Url.java   | 18 +++++------
 .../apache/wicket/request/http/WebResponse.java    |  3 +-
 .../apache/wicket/util/encoding/UrlDecoder.java    | 37 +++++++++++-----------
 .../apache/wicket/util/encoding/UrlEncoder.java    | 31 +++++++++---------
 .../java/org/apache/wicket/util/file/Files.java    |  3 +-
 .../wicket/util/encoding/UrlDecoderTest.java       | 12 ++++---
 .../wicket/util/encoding/UrlEncoderTest.java       | 20 ++++++------
 19 files changed, 105 insertions(+), 85 deletions(-)

diff --git a/wicket-core/src/main/java/org/apache/wicket/mock/MockWebRequest.java b/wicket-core/src/main/java/org/apache/wicket/mock/MockWebRequest.java
index 2641300..b84758a 100644
--- a/wicket-core/src/main/java/org/apache/wicket/mock/MockWebRequest.java
+++ b/wicket-core/src/main/java/org/apache/wicket/mock/MockWebRequest.java
@@ -17,6 +17,7 @@
 package org.apache.wicket.mock;
 
 import java.nio.charset.Charset;
+import java.nio.charset.StandardCharsets;
 import java.sql.Time;
 import java.time.Instant;
 import java.util.ArrayList;
@@ -276,7 +277,7 @@ public class MockWebRequest extends WebRequest
 	@Override
 	public Charset getCharset()
 	{
-		return Charset.forName("UTF-8");
+		return StandardCharsets.UTF_8;
 	}
 
 	@Override
diff --git a/wicket-core/src/main/java/org/apache/wicket/protocol/http/RequestUtils.java b/wicket-core/src/main/java/org/apache/wicket/protocol/http/RequestUtils.java
index 49e4fd9..ccb349b 100644
--- a/wicket-core/src/main/java/org/apache/wicket/protocol/http/RequestUtils.java
+++ b/wicket-core/src/main/java/org/apache/wicket/protocol/http/RequestUtils.java
@@ -17,6 +17,7 @@
 package org.apache.wicket.protocol.http;
 
 import java.nio.charset.Charset;
+import java.nio.charset.StandardCharsets;
 import java.nio.charset.UnsupportedCharsetException;
 import java.util.ArrayList;
 import java.util.Arrays;
@@ -187,15 +188,16 @@ public final class RequestUtils
 	private static Charset getDefaultCharset()
 	{
 		String charsetName = null;
-
 		if (Application.exists())
 		{
 			charsetName = Application.get().getRequestCycleSettings().getResponseRequestEncoding();
 		}
+		
 		if (Strings.isEmpty(charsetName))
 		{
-			charsetName = "UTF-8";
+			return StandardCharsets.UTF_8;
 		}
+		
 		return Charset.forName(charsetName);
 	}
 
diff --git a/wicket-core/src/test/java/org/apache/wicket/ajax/AjaxRequestHandlerTest.java b/wicket-core/src/test/java/org/apache/wicket/ajax/AjaxRequestHandlerTest.java
index e3fdc5d..1074966 100644
--- a/wicket-core/src/test/java/org/apache/wicket/ajax/AjaxRequestHandlerTest.java
+++ b/wicket-core/src/test/java/org/apache/wicket/ajax/AjaxRequestHandlerTest.java
@@ -24,6 +24,7 @@ import static org.junit.jupiter.api.Assertions.fail;
 import java.io.IOException;
 import java.lang.reflect.Constructor;
 import java.nio.charset.Charset;
+import java.nio.charset.StandardCharsets;
 import java.time.Instant;
 import java.util.Map;
 import java.util.regex.Matcher;
@@ -200,7 +201,7 @@ class AjaxRequestHandlerTest extends WicketTestCase
 		tester.startPage(page);
 
 		// wicket-ajax-jquery encodes non ASCII id
-		String encoded = UrlEncoder.QUERY_INSTANCE.encode("€uro", Charset.forName("UTF-8"));
+		String encoded = UrlEncoder.QUERY_INSTANCE.encode("€uro", StandardCharsets.UTF_8);
 		tester.getRequest().setHeader("Wicket-FocusedElementId", encoded);
 
 		tester.executeAjaxEvent("link", "click");
diff --git a/wicket-core/src/test/java/org/apache/wicket/core/request/mapper/AbstractMapperTest.java b/wicket-core/src/test/java/org/apache/wicket/core/request/mapper/AbstractMapperTest.java
index 5e68178..35491d4 100644
--- a/wicket-core/src/test/java/org/apache/wicket/core/request/mapper/AbstractMapperTest.java
+++ b/wicket-core/src/test/java/org/apache/wicket/core/request/mapper/AbstractMapperTest.java
@@ -19,6 +19,7 @@ package org.apache.wicket.core.request.mapper;
 import static org.junit.jupiter.api.Assertions.assertEquals;
 
 import java.nio.charset.Charset;
+import java.nio.charset.StandardCharsets;
 import java.util.Locale;
 
 import org.apache.wicket.request.Request;
@@ -58,7 +59,7 @@ abstract class AbstractMapperTest
 			@Override
 			public Charset getCharset()
 			{
-				return Charset.forName("UTF-8");
+				return StandardCharsets.UTF_8;
 			}
 
 			@Override
diff --git a/wicket-core/src/test/java/org/apache/wicket/core/request/mapper/BookmarkableMapperTest.java b/wicket-core/src/test/java/org/apache/wicket/core/request/mapper/BookmarkableMapperTest.java
index 0482352..2ceb57d 100644
--- a/wicket-core/src/test/java/org/apache/wicket/core/request/mapper/BookmarkableMapperTest.java
+++ b/wicket-core/src/test/java/org/apache/wicket/core/request/mapper/BookmarkableMapperTest.java
@@ -24,6 +24,7 @@ import static org.junit.jupiter.api.Assertions.assertThrows;
 import static org.junit.jupiter.api.Assertions.assertTrue;
 
 import java.nio.charset.Charset;
+import java.nio.charset.StandardCharsets;
 import java.util.Locale;
 
 import org.apache.wicket.MockPage;
@@ -315,7 +316,7 @@ class BookmarkableMapperTest extends AbstractMapperTest
 			@Override
 			public Charset getCharset()
 			{
-				return Charset.forName("UTF-8");
+				return StandardCharsets.UTF_8;
 			}
 
 			@Override
@@ -373,7 +374,7 @@ class BookmarkableMapperTest extends AbstractMapperTest
 			@Override
 			public Charset getCharset()
 			{
-				return Charset.forName("UTF-8");
+				return StandardCharsets.UTF_8;
 			}
 
 			@Override
@@ -430,7 +431,7 @@ class BookmarkableMapperTest extends AbstractMapperTest
 			@Override
 			public Charset getCharset()
 			{
-				return Charset.forName("UTF-8");
+				return StandardCharsets.UTF_8;
 			}
 
 			@Override
diff --git a/wicket-core/src/test/java/org/apache/wicket/core/request/mapper/PageInstanceMapperTest.java b/wicket-core/src/test/java/org/apache/wicket/core/request/mapper/PageInstanceMapperTest.java
index e2281c8..5f720bc 100644
--- a/wicket-core/src/test/java/org/apache/wicket/core/request/mapper/PageInstanceMapperTest.java
+++ b/wicket-core/src/test/java/org/apache/wicket/core/request/mapper/PageInstanceMapperTest.java
@@ -22,6 +22,7 @@ import static org.junit.jupiter.api.Assertions.assertNull;
 import static org.junit.jupiter.api.Assertions.assertThrows;
 
 import java.nio.charset.Charset;
+import java.nio.charset.StandardCharsets;
 import java.util.Locale;
 
 import org.apache.wicket.MockPage;
@@ -210,7 +211,7 @@ class PageInstanceMapperTest extends AbstractMapperTest
 			@Override
 			public Charset getCharset()
 			{
-				return Charset.forName("UTF-8");
+				return StandardCharsets.UTF_8;
 			}
 
 			@Override
@@ -255,7 +256,7 @@ class PageInstanceMapperTest extends AbstractMapperTest
 			@Override
 			public Charset getCharset()
 			{
-				return Charset.forName("UTF-8");
+				return StandardCharsets.UTF_8;
 			}
 
 			@Override
diff --git a/wicket-core/src/test/java/org/apache/wicket/core/request/mapper/ResourceMapperTest.java b/wicket-core/src/test/java/org/apache/wicket/core/request/mapper/ResourceMapperTest.java
index a31c508..4077ee2 100644
--- a/wicket-core/src/test/java/org/apache/wicket/core/request/mapper/ResourceMapperTest.java
+++ b/wicket-core/src/test/java/org/apache/wicket/core/request/mapper/ResourceMapperTest.java
@@ -21,6 +21,7 @@ import static org.junit.jupiter.api.Assertions.assertNotNull;
 import static org.junit.jupiter.api.Assertions.assertNull;
 
 import java.nio.charset.Charset;
+import java.nio.charset.StandardCharsets;
 import java.util.List;
 import java.util.Locale;
 
@@ -40,7 +41,7 @@ import org.junit.jupiter.api.Test;
 
 class ResourceMapperTest extends WicketTestCase
 {
-	private static final Charset CHARSET = Charset.forName("UTF-8");
+	private static final Charset CHARSET = StandardCharsets.UTF_8;
 	private static final String SHARED_NAME = "test-resource";
 
 	private IRequestMapper mapper;
diff --git a/wicket-core/src/test/java/org/apache/wicket/markup/parser/filter/CustomMarkupLabel.java b/wicket-core/src/test/java/org/apache/wicket/markup/parser/filter/CustomMarkupLabel.java
index 508e200..cf74884 100644
--- a/wicket-core/src/test/java/org/apache/wicket/markup/parser/filter/CustomMarkupLabel.java
+++ b/wicket-core/src/test/java/org/apache/wicket/markup/parser/filter/CustomMarkupLabel.java
@@ -17,6 +17,7 @@
 package org.apache.wicket.markup.parser.filter;
 
 import java.nio.charset.Charset;
+import java.nio.charset.StandardCharsets;
 
 import org.apache.wicket.Component;
 import org.apache.wicket.MarkupContainer;
@@ -57,7 +58,7 @@ class CustomMarkupLabel
 	{
 		// the markup is loaded from database in our real application
 		StringResourceStream res = new StringResourceStream(SAMPLE_MARKUP);
-		res.setCharset(Charset.forName("UTF-8"));
+		res.setCharset(StandardCharsets.UTF_8);
 		return res;
 	}
 
diff --git a/wicket-core/src/test/java/org/apache/wicket/protocol/http/RequestUtilsTest.java b/wicket-core/src/test/java/org/apache/wicket/protocol/http/RequestUtilsTest.java
index 80da4ed..4ff4456 100644
--- a/wicket-core/src/test/java/org/apache/wicket/protocol/http/RequestUtilsTest.java
+++ b/wicket-core/src/test/java/org/apache/wicket/protocol/http/RequestUtilsTest.java
@@ -19,6 +19,7 @@ package org.apache.wicket.protocol.http;
 import static org.junit.jupiter.api.Assertions.assertEquals;
 
 import java.nio.charset.Charset;
+import java.nio.charset.StandardCharsets;
 
 import org.apache.wicket.protocol.http.mock.MockHttpServletRequest;
 import org.apache.wicket.request.mapper.parameter.PageParameters;
@@ -31,7 +32,7 @@ import org.junit.jupiter.api.Test;
 class RequestUtilsTest
 {
 
-	private static final Charset UTF_8_CHARSET = Charset.forName("UTF-8");
+	private static final Charset UTF_8_CHARSET = StandardCharsets.UTF_8;
 
 	/**
 	 * 
@@ -181,9 +182,9 @@ class RequestUtilsTest
 		MockHttpServletRequest request = new MockHttpServletRequest(null, null, null);
 
 		request.setCharacterEncoding("UTF-8");
-		assertEquals(Charset.forName("UTF-8"), RequestUtils.getCharset(request));
+		assertEquals(StandardCharsets.UTF_8, RequestUtils.getCharset(request));
 
 		request.setCharacterEncoding("FOO");
-		assertEquals(Charset.forName("UTF-8"), RequestUtils.getCharset(request));
+		assertEquals(StandardCharsets.UTF_8, RequestUtils.getCharset(request));
 	}
 }
diff --git a/wicket-core/src/test/java/org/apache/wicket/protocol/http/WicketURLTest.java b/wicket-core/src/test/java/org/apache/wicket/protocol/http/WicketURLTest.java
index 52e3158..0ad9541 100644
--- a/wicket-core/src/test/java/org/apache/wicket/protocol/http/WicketURLTest.java
+++ b/wicket-core/src/test/java/org/apache/wicket/protocol/http/WicketURLTest.java
@@ -22,6 +22,8 @@ import org.apache.wicket.util.encoding.UrlDecoder;
 import org.apache.wicket.util.encoding.UrlEncoder;
 import org.junit.jupiter.api.Test;
 
+import java.nio.charset.StandardCharsets;
+
 /**
  * @author Doug Donohoe
  */
@@ -33,8 +35,8 @@ class WicketURLTest
 	@Test
 	void pathEncoder()
 	{
-		assertEquals("+", UrlEncoder.PATH_INSTANCE.encode("+", "UTF-8"));
-		assertEquals("%20", UrlEncoder.PATH_INSTANCE.encode(" ", "UTF-8"));
+		assertEquals("+", UrlEncoder.PATH_INSTANCE.encode("+", StandardCharsets.UTF_8));
+		assertEquals("%20", UrlEncoder.PATH_INSTANCE.encode(" ", StandardCharsets.UTF_8));
 	}
 
 	/**
@@ -43,8 +45,8 @@ class WicketURLTest
 	@Test
 	void queryEncoder()
 	{
-		assertEquals("+", UrlEncoder.QUERY_INSTANCE.encode(" ", "UTF-8"));
-		assertEquals("%2B", UrlEncoder.QUERY_INSTANCE.encode("+", "UTF-8"));
+		assertEquals("+", UrlEncoder.QUERY_INSTANCE.encode(" ", StandardCharsets.UTF_8));
+		assertEquals("%2B", UrlEncoder.QUERY_INSTANCE.encode("+", StandardCharsets.UTF_8));
 	}
 
 	/**
@@ -53,8 +55,8 @@ class WicketURLTest
 	@Test
 	void pathDecoder()
 	{
-		assertEquals("+", UrlDecoder.PATH_INSTANCE.decode("+", "UTF-8"));
-		assertEquals(" ", UrlDecoder.PATH_INSTANCE.decode("%20", "UTF-8"));
+		assertEquals("+", UrlDecoder.PATH_INSTANCE.decode("+", StandardCharsets.UTF_8));
+		assertEquals(" ", UrlDecoder.PATH_INSTANCE.decode("%20", StandardCharsets.UTF_8));
 	}
 
 	/**
@@ -63,7 +65,7 @@ class WicketURLTest
 	@Test
 	void queryDecoder()
 	{
-		assertEquals(" ", UrlDecoder.QUERY_INSTANCE.decode("+", "UTF-8"));
-		assertEquals("+", UrlDecoder.QUERY_INSTANCE.decode("%2B", "UTF-8"));
+		assertEquals(" ", UrlDecoder.QUERY_INSTANCE.decode("+", StandardCharsets.UTF_8));
+		assertEquals("+", UrlDecoder.QUERY_INSTANCE.decode("%2B", StandardCharsets.UTF_8));
 	}
 }
diff --git a/wicket-core/src/test/java/org/apache/wicket/request/resource/CharSequenceResourceTest.java b/wicket-core/src/test/java/org/apache/wicket/request/resource/CharSequenceResourceTest.java
index ef3239a..340597d 100644
--- a/wicket-core/src/test/java/org/apache/wicket/request/resource/CharSequenceResourceTest.java
+++ b/wicket-core/src/test/java/org/apache/wicket/request/resource/CharSequenceResourceTest.java
@@ -19,6 +19,7 @@ package org.apache.wicket.request.resource;
 import static org.junit.jupiter.api.Assertions.assertEquals;
 
 import java.nio.charset.Charset;
+import java.nio.charset.StandardCharsets;
 
 import org.junit.jupiter.api.Test;
 
@@ -38,7 +39,7 @@ class CharSequenceResourceTest
 	void getLength_UTF8_whenUnicodeSymbols_thenReturnTheBytesLength() throws Exception
 	{
 		CharSequenceResource resource = new CharSequenceResource("plain/text");
-		resource.setCharset(Charset.forName("UTF-8"));
+		resource.setCharset(StandardCharsets.UTF_8);
 		assertEquals(Long.valueOf(5L), resource.getLength("a\u1234d"));
 	}
 
@@ -46,7 +47,7 @@ class CharSequenceResourceTest
 	void getLength_UTF16_whenUnicodeSymbols_thenReturnTheBytesLength() throws Exception
 	{
 		CharSequenceResource resource = new CharSequenceResource("plain/text");
-		resource.setCharset(Charset.forName("UTF-16"));
+		resource.setCharset(StandardCharsets.UTF_16);
 		assertEquals(Long.valueOf(8L), resource.getLength("a\u1234d"));
 	}
 }
diff --git a/wicket-core/src/test/java/org/apache/wicket/request/resource/caching/ContextRelativeResourceCachingTest.java b/wicket-core/src/test/java/org/apache/wicket/request/resource/caching/ContextRelativeResourceCachingTest.java
index 3aeac68..8e9544e 100644
--- a/wicket-core/src/test/java/org/apache/wicket/request/resource/caching/ContextRelativeResourceCachingTest.java
+++ b/wicket-core/src/test/java/org/apache/wicket/request/resource/caching/ContextRelativeResourceCachingTest.java
@@ -21,6 +21,7 @@ import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertNotNull;
 
 import java.nio.charset.Charset;
+import java.nio.charset.StandardCharsets;
 import java.util.Locale;
 
 import org.apache.wicket.request.IRequestHandler;
@@ -40,7 +41,7 @@ import org.junit.jupiter.api.Test;
  */
 class ContextRelativeResourceCachingTest extends WicketTestCase
 {
-	private static final Charset CHARSET = Charset.forName("UTF-8");
+	private static final Charset CHARSET = StandardCharsets.UTF_8;
 	private static final String SHARED_NAME = "contextresource";
 
 	private Request createRequest(final String url)
diff --git a/wicket-request/src/main/java/org/apache/wicket/request/Url.java b/wicket-request/src/main/java/org/apache/wicket/request/Url.java
index e9d4e71..be52c5b 100755
--- a/wicket-request/src/main/java/org/apache/wicket/request/Url.java
+++ b/wicket-request/src/main/java/org/apache/wicket/request/Url.java
@@ -18,6 +18,7 @@ package org.apache.wicket.request;
 
 import java.io.Serializable;
 import java.nio.charset.Charset;
+import java.nio.charset.StandardCharsets;
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.Iterator;
@@ -73,8 +74,6 @@ public class Url implements Serializable
 {
 	private static final long serialVersionUID = 1L;
 
-	private static final String DEFAULT_CHARSET_NAME = "UTF-8";
-
 	private final List<String> segments;
 
 	private final List<QueryParameter> parameters;
@@ -423,13 +422,14 @@ public class Url implements Serializable
 	 */
 	public Charset getCharset()
 	{
-		if (Strings.isEmpty(charsetName))
-		{
-			charsetName = DEFAULT_CHARSET_NAME;
-		}
 		if (_charset == null)
 		{
-			_charset = Charset.forName(charsetName);
+			if (Strings.isEmpty(charsetName))
+			{
+				_charset = StandardCharsets.UTF_8;
+			} else {
+				_charset = Charset.forName(charsetName);
+			}
 		}
 		return _charset;
 	}
@@ -442,7 +442,7 @@ public class Url implements Serializable
 	{
 		if (charset == null)
 		{
-			charsetName = "UTF-8";
+			charsetName = null;
 			_charset = null;
 		}
 		else
@@ -994,7 +994,7 @@ public class Url implements Serializable
 		@Override
 		public String toString()
 		{
-			return toString(Charset.forName(DEFAULT_CHARSET_NAME));
+			return toString(StandardCharsets.UTF_8);
 		}
 
 		/**
diff --git a/wicket-request/src/main/java/org/apache/wicket/request/http/WebResponse.java b/wicket-request/src/main/java/org/apache/wicket/request/http/WebResponse.java
index 89a1b3e..fd4133c 100644
--- a/wicket-request/src/main/java/org/apache/wicket/request/http/WebResponse.java
+++ b/wicket-request/src/main/java/org/apache/wicket/request/http/WebResponse.java
@@ -17,6 +17,7 @@
 package org.apache.wicket.request.http;
 
 import java.io.IOException;
+import java.nio.charset.StandardCharsets;
 import java.time.Duration;
 import java.time.Instant;
 import javax.servlet.http.Cookie;
@@ -182,7 +183,7 @@ public abstract class WebResponse extends Response
 	{
 		return (Strings.isEmpty(filename) ? "" : String.format(
 			"; filename=\"%1$s\"; filename*=UTF-8''%1$s",
-			UrlEncoder.HEADER_INSTANCE.encode(filename, "UTF-8")));
+			UrlEncoder.HEADER_INSTANCE.encode(filename, StandardCharsets.UTF_8)));
 	}
 
 	/**
diff --git a/wicket-util/src/main/java/org/apache/wicket/util/encoding/UrlDecoder.java b/wicket-util/src/main/java/org/apache/wicket/util/encoding/UrlDecoder.java
index 0f23cdf..7e2b340 100644
--- a/wicket-util/src/main/java/org/apache/wicket/util/encoding/UrlDecoder.java
+++ b/wicket-util/src/main/java/org/apache/wicket/util/encoding/UrlDecoder.java
@@ -18,7 +18,10 @@ package org.apache.wicket.util.encoding;
 
 import java.io.UnsupportedEncodingException;
 import java.nio.charset.Charset;
+import java.nio.charset.IllegalCharsetNameException;
+import java.nio.charset.UnsupportedCharsetException;
 
+import org.apache.wicket.util.lang.Args;
 import org.apache.wicket.util.string.Strings;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -75,20 +78,29 @@ public class UrlDecoder
 	 * @return decoded string
 	 * @see java.net.URLDecoder#decode(String, String)
 	 */
-	public String decode(final String s, final Charset enc)
+	public String decode(final String s, final String enc)
 	{
-		return decode(s, enc.name());
+		Args.notNull(enc, "enc");
+
+		try
+		{
+			return decode(s, Charset.forName(enc));
+		}
+		catch (IllegalCharsetNameException | UnsupportedCharsetException e)
+		{
+			throw new RuntimeException(new UnsupportedEncodingException(enc));
+		}
 	}
 
 	/**
 	 * @param s
 	 *            string to decode
-	 * @param enc
+	 * @param charset
 	 *            encoding to decode with
 	 * @return decoded string
 	 * @see java.net.URLDecoder#decode(String, String)
 	 */
-	public String decode(final String s, final String enc)
+	public String decode(final String s, final Charset charset)
 	{
 		if (Strings.isEmpty(s))
 		{
@@ -99,11 +111,7 @@ public class UrlDecoder
 		StringBuilder sb = new StringBuilder(numChars > 500 ? numChars / 2 : numChars);
 		int i = 0;
 
-		if (enc.length() == 0)
-		{
-			throw new RuntimeException(new UnsupportedEncodingException(
-				"URLDecoder: empty string enc parameter"));
-		}
+		Args.notNull(charset, "charset");
 
 		char c;
 		byte[] bytes = null;
@@ -154,14 +162,7 @@ public class UrlDecoder
 							break;
 						}
 
-						try
-						{
-							sb.append(new String(bytes, 0, pos, enc));
-						}
-						catch (UnsupportedEncodingException e)
-						{
-							throw new RuntimeException(e);
-						}
+						sb.append(new String(bytes, 0, pos, charset));
 					}
 					catch (NumberFormatException e)
 					{
@@ -183,4 +184,4 @@ public class UrlDecoder
 		// that way none will come through
 		return sb.toString().replace("\0", "NULL");
 	}
-}
\ No newline at end of file
+}
diff --git a/wicket-util/src/main/java/org/apache/wicket/util/encoding/UrlEncoder.java b/wicket-util/src/main/java/org/apache/wicket/util/encoding/UrlEncoder.java
index 4a24f3f..be8d71d 100644
--- a/wicket-util/src/main/java/org/apache/wicket/util/encoding/UrlEncoder.java
+++ b/wicket-util/src/main/java/org/apache/wicket/util/encoding/UrlEncoder.java
@@ -226,41 +226,40 @@ public class UrlEncoder
 	/**
 	 * @param s
 	 *            string to encode
-	 * @param charset
+	 * @param charsetName
 	 *            charset to use for encoding
 	 * @return encoded string
 	 * @see java.net.URLEncoder#encode(String, String)
 	 */
-	public String encode(final String s, final Charset charset)
+	public String encode(final String s, final String charsetName)
 	{
-		return encode(s, charset.name());
+		Args.notNull(charsetName, "charsetName");
+
+		try
+		{
+			return encode(s, Charset.forName(charsetName));
+		}
+		catch (IllegalCharsetNameException | UnsupportedCharsetException e)
+		{
+			throw new RuntimeException(new UnsupportedEncodingException(charsetName));
+		}
 	}
 
 	/**
 	 * @param unsafeInput
 	 *            string to encode
-	 * @param charsetName
+	 * @param charset
 	 *            encoding to use
 	 * @return encoded string
 	 * @see java.net.URLEncoder#encode(String, String)
 	 */
-	public String encode(final String unsafeInput, final String charsetName)
+	public String encode(final String unsafeInput, final Charset charset)
 	{
 		final String s = unsafeInput.replace("\0", "NULL");
 		StringBuilder out = new StringBuilder(s.length());
-		Charset charset;
 		CharArrayWriter charArrayWriter = new CharArrayWriter();
 
-		Args.notNull(charsetName, "charsetName");
-
-		try
-		{
-			charset = Charset.forName(charsetName);
-		}
-		catch (IllegalCharsetNameException | UnsupportedCharsetException e)
-		{
-			throw new RuntimeException(new UnsupportedEncodingException(charsetName));
-		}
+		Args.notNull(charset, "charset");
 
 		for (int i = 0; i < s.length();)
 		{
diff --git a/wicket-util/src/main/java/org/apache/wicket/util/file/Files.java b/wicket-util/src/main/java/org/apache/wicket/util/file/Files.java
index 11bfccd..e8ba616 100644
--- a/wicket-util/src/main/java/org/apache/wicket/util/file/Files.java
+++ b/wicket-util/src/main/java/org/apache/wicket/util/file/Files.java
@@ -24,6 +24,7 @@ import java.io.FileOutputStream;
 import java.io.IOException;
 import java.io.InputStream;
 import java.net.URL;
+import java.nio.charset.StandardCharsets;
 import java.time.Instant;
 import org.apache.wicket.util.encoding.UrlDecoder;
 import org.apache.wicket.util.io.IOUtils;
@@ -363,7 +364,7 @@ public class Files
 	public static File getLocalFileFromUrl(URL url)
 	{
 		final URL location = Args.notNull(url, "url");
-		return getLocalFileFromUrl(UrlDecoder.PATH_INSTANCE.decode(location.toExternalForm(), "UTF-8"));
+		return getLocalFileFromUrl(UrlDecoder.PATH_INSTANCE.decode(location.toExternalForm(), StandardCharsets.UTF_8));
 	}
 
 	/**
diff --git a/wicket-util/src/test/java/org/apache/wicket/util/encoding/UrlDecoderTest.java b/wicket-util/src/test/java/org/apache/wicket/util/encoding/UrlDecoderTest.java
index 2db3f52..40ee8af 100644
--- a/wicket-util/src/test/java/org/apache/wicket/util/encoding/UrlDecoderTest.java
+++ b/wicket-util/src/test/java/org/apache/wicket/util/encoding/UrlDecoderTest.java
@@ -18,6 +18,8 @@ package org.apache.wicket.util.encoding;
 
 import org.junit.jupiter.api.Test;
 
+import java.nio.charset.StandardCharsets;
+
 import static org.junit.jupiter.api.Assertions.assertEquals;
 
 @SuppressWarnings("javadoc")
@@ -27,7 +29,7 @@ public class UrlDecoderTest
 	public void mustNotEmitNullByteForPath() throws Exception
 	{
 		String evil = "http://www.devil.com/highway/to%00hell";
-		String decoded = UrlDecoder.PATH_INSTANCE.decode(evil, "UTF-8");
+		String decoded = UrlDecoder.PATH_INSTANCE.decode(evil, StandardCharsets.UTF_8);
 		assertEquals(-1, decoded.indexOf('\0'));
 		assertEquals("http://www.devil.com/highway/toNULLhell", decoded);
 	}
@@ -36,7 +38,7 @@ public class UrlDecoderTest
 	public void mustNotEmitNullByteForQuery() throws Exception
 	{
 		String evil = "http://www.devil.com/highway?destination=%00hell";
-		String decoded = UrlDecoder.QUERY_INSTANCE.decode(evil, "UTF-8");
+		String decoded = UrlDecoder.QUERY_INSTANCE.decode(evil, StandardCharsets.UTF_8);
 		assertEquals(-1, decoded.indexOf('\0'));
 		assertEquals("http://www.devil.com/highway?destination=NULLhell", decoded);
 	}
@@ -48,15 +50,15 @@ public class UrlDecoderTest
 	public void badUrlEntities() throws Exception
 	{
 		String url = "http://localhost/test?a=%%%";
-		String decoded = UrlDecoder.QUERY_INSTANCE.decode(url, "UTF-8");
+		String decoded = UrlDecoder.QUERY_INSTANCE.decode(url, StandardCharsets.UTF_8);
 		assertEquals("http://localhost/test?a=", decoded);
 
 		url = "http://localhost/test?%%%";
-		decoded = UrlDecoder.QUERY_INSTANCE.decode(url, "UTF-8");
+		decoded = UrlDecoder.QUERY_INSTANCE.decode(url, StandardCharsets.UTF_8);
 		assertEquals("http://localhost/test?", decoded);
 
 		url = "http://localhost/test?%a=%b%";
-		decoded = UrlDecoder.QUERY_INSTANCE.decode(url, "UTF-8");
+		decoded = UrlDecoder.QUERY_INSTANCE.decode(url, StandardCharsets.UTF_8);
 		assertEquals("http://localhost/test?a=b", decoded);
 	}
 }
diff --git a/wicket-util/src/test/java/org/apache/wicket/util/encoding/UrlEncoderTest.java b/wicket-util/src/test/java/org/apache/wicket/util/encoding/UrlEncoderTest.java
index 965256e..646f2e3 100644
--- a/wicket-util/src/test/java/org/apache/wicket/util/encoding/UrlEncoderTest.java
+++ b/wicket-util/src/test/java/org/apache/wicket/util/encoding/UrlEncoderTest.java
@@ -19,6 +19,8 @@ package org.apache.wicket.util.encoding;
 import org.apache.wicket.util.crypt.CharEncoding;
 import org.junit.jupiter.api.Test;
 
+import java.nio.charset.StandardCharsets;
+
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertNotEquals;
 
@@ -33,11 +35,11 @@ public class UrlEncoderTest
 	public void pathUnencoded()  {
 		String unencoded = "azAZ09.-_~!$&*+,;=:@";
 		
-		assertEquals(unencoded,  UrlEncoder.PATH_INSTANCE.encode(unencoded, CharEncoding.UTF_8));
+		assertEquals(unencoded,  UrlEncoder.PATH_INSTANCE.encode(unencoded, StandardCharsets.UTF_8));
 		
 		for (char candidate : encodingCandidates) {
 			if (unencoded.indexOf(candidate) == -1) {
-				assertNotEquals("" + candidate, UrlEncoder.PATH_INSTANCE.encode("" + candidate, CharEncoding.UTF_8));
+				assertNotEquals("" + candidate, UrlEncoder.PATH_INSTANCE.encode("" + candidate, StandardCharsets.UTF_8));
 			}
 		}
 	}
@@ -46,11 +48,11 @@ public class UrlEncoderTest
 	public void queryStringUnencoded()  {
 		String unencoded = "azAZ09.-_~!$*,:@/";
 		
-		assertEquals(unencoded, UrlEncoder.QUERY_INSTANCE.encode(unencoded, CharEncoding.UTF_8));
+		assertEquals(unencoded, UrlEncoder.QUERY_INSTANCE.encode(unencoded, StandardCharsets.UTF_8));
 
 		for (char candidate : encodingCandidates) {
 			if (unencoded.indexOf(candidate) == -1) {
-				assertNotEquals("" + candidate, UrlEncoder.QUERY_INSTANCE.encode("" + candidate, CharEncoding.UTF_8));
+				assertNotEquals("" + candidate, UrlEncoder.QUERY_INSTANCE.encode("" + candidate, StandardCharsets.UTF_8));
 			}
 		}
 	}
@@ -59,11 +61,11 @@ public class UrlEncoderTest
 	public void headerUnencoded()  {
 		String unencoded = "azAZ09.-_~!$&+#^`|";
 		
-		assertEquals(unencoded, UrlEncoder.HEADER_INSTANCE.encode(unencoded, CharEncoding.UTF_8));
+		assertEquals(unencoded, UrlEncoder.HEADER_INSTANCE.encode(unencoded, StandardCharsets.UTF_8));
 		
 		for (char candidate : encodingCandidates) {
 			if (unencoded.indexOf(candidate) == -1) {
-				assertNotEquals("" + candidate, UrlEncoder.HEADER_INSTANCE.encode("" + candidate, CharEncoding.UTF_8));
+				assertNotEquals("" + candidate, UrlEncoder.HEADER_INSTANCE.encode("" + candidate, StandardCharsets.UTF_8));
 			}
 		}
 	}
@@ -77,7 +79,7 @@ public class UrlEncoderTest
 	public void encodeApostrophe()
 	{
 		assertEquals("someone%27s%20bad%20url",
-			UrlEncoder.PATH_INSTANCE.encode("someone's bad url", CharEncoding.UTF_8));
+			UrlEncoder.PATH_INSTANCE.encode("someone's bad url", StandardCharsets.UTF_8));
 	}
 
 	/**
@@ -89,7 +91,7 @@ public class UrlEncoderTest
 	public void dontEncodeSemicolon()
 	{
 		String encoded = UrlEncoder.PATH_INSTANCE.encode("path;jsessionid=1234567890",
-			CharEncoding.UTF_8);
+			StandardCharsets.UTF_8);
 		assertEquals("path;jsessionid=1234567890", encoded);
 	}
 
@@ -97,6 +99,6 @@ public class UrlEncoderTest
 	public void dontStopOnNullByte() throws Exception
 	{
 		assertEquals("someone%27s%20badNULL%20url",
-			UrlEncoder.PATH_INSTANCE.encode("someone's bad\0 url", CharEncoding.UTF_8));
+			UrlEncoder.PATH_INSTANCE.encode("someone's bad\0 url", StandardCharsets.UTF_8));
 	}
 }