Course – LS – All

Get started with Spring and Spring Boot, through the Learn Spring course:

>> CHECK OUT THE COURSE

1. Introduction

When working with URLs in Java, it’s essential to ensure they are properly encoded to avoid errors and maintain accurate data transmission. URLs may contain special characters, including spaces, that need to be encoded for uniform interpretation across different systems.

In this tutorial, we’ll explore how to handle spaces within URLs using the URLEncoder class.

2. Understand URL Encoding

URLs can’t have spaces directly. To include them, we need to use URL encoding.

URL encoding, also known as percent-encoding, is a standard mechanism for converting special characters and non-ASCII characters into a format suitable for transmission via URLs.

In URL encoding, we replace each character with a percent sign ‘%’ followed by its hexadecimal representation. For example, spaces are represented as %20. This practice ensures that web servers and browsers correctly parse and interpret URLs, preventing ambiguity and errors during data transmission.

3. Why Use URLEncoder

The URLEncoder class is part of the Java Standard Library, specifically in the java.net package. The purpose of the URLEncoder class is to encode strings into a format suitable for use in URLs. This includes replacing special characters with percent-encoded equivalents.

It offers static methods for encoding strings into the application/x-www-form-urlencoded MIME format, commonly used for transmitting data in HTML forms. The application/x-www-form-urlencoded format is similar to the query component of a URL but with some differences. The main difference lies in encoding the space character as a plus sign (+) instead of %20.

The URLEncoder class has two methods for encoding strings: encode(String s) and encode(String s, String enc). The first method uses the default encoding scheme of the platform. The second method allows us to specify the encoding scheme, such as UTF-8, which is the recommended standard for web applications. When we specify UTF-8 as the encoding scheme, we ensure consistent encoding and decoding of characters across different systems, thereby minimizing the risk of misinterpretation or errors in URL handling.

4. Implementation

Let’s now encode the string “Welcome to the Baeldung Website!” for a URL using URLEncoder. In this example, we encode the string using the platform’s default encoding scheme, replacing spaces with the plus sign (+) symbol:

String originalString = "Welcome to the Baeldung Website!";
String encodedString = URLEncoder.encode(originalString);
assertEquals("Welcome+to+the+Baeldung+Website%21", encodedString);

Notably, the default encoding scheme used by the URLEncoder.encode() method in Java is indeed UTF-8. As such, specifying UTF-8 explicitly doesn’t change the default behavior of encoding spaces as plus signs:

String originalString = "Welcome to the Baeldung Website!";
String encodedString = URLEncoder.encode(originalString, StandardCharsets.UTF_8);
assertEquals("Welcome+to+the+Baeldung+Website%21", encodedString);

However, if we want to encode the spaces for use in a URL, we may need to replace the plus sign with %20, as some web servers may not recognize the plus sign as a space. We can do this by using the replace() method of the String class:

String originalString = "Welcome to the Baeldung Website!";
String encodedString = URLEncoder.encode(originalString).replace("+", "%20");
assertEquals("Welcome%20to%20the%20Baeldung%20Website%21", encodedString);

Alternatively, we can use the replaceAll() method with a regular expression \\+ to replace all occurrences of the plus sign:

String originalString = "Welcome to the Baeldung Website!";
String encodedString = URLEncoder.encode(originalString).replaceAll("\\+", "%20");
assertEquals("Welcome%20to%20the%20Baeldung%20Website%21", encodedString);

5. Conclusion

In this article, we learned the fundamentals of URL encoding in Java, focusing on the URLEncoder class for encoding spaces into URL-safe formats. By explicitly specifying the encoding, such as UTF-8, we can ensure consistent representation of space characters in URLs.

As always, the code for the examples is available over on GitHub.

Course – LS – All

Get started with Spring and Spring Boot, through the Learn Spring course:

>> CHECK OUT THE COURSE
res – REST with Spring (eBook) (everywhere)
1 Comment
Oldest
Newest
Inline Feedbacks
View all comments
Comments are open for 30 days after publishing a post. For any issues past this date, use the Contact form on the site.