Try it yourself with our free Url Encoder tool — runs entirely in your browser, no signup needed.

How to URL decode in Java

How to URL Decode in Java

URL decoding is the process of converting a URL-encoded string back to its original form. This is a crucial step when working with web applications, as URLs often contain special characters that need to be encoded to ensure proper transmission over the internet. In this article, we will explore how to URL decode in Java, covering the basics, common edge cases, and performance tips.

Quick Example

Here is a minimal example of how to URL decode in Java:

import java.net.URLDecoder;
import java.nio.charset.StandardCharsets;

public class UrlDecoder {
    public static void main(String[] args) throws Exception {
        String encodedUrl = "https%3A%2F%2Fexample.com%2Fpath%3Fquery%3Dparam";
        String decodedUrl = URLDecoder.decode(encodedUrl, StandardCharsets.UTF_8.toString());
        System.out.println(decodedUrl); // prints "https://example.com/path?query=param"
    }
}

This example uses the URLDecoder class to decode a URL-encoded string. The decode method takes two parameters: the encoded string and the character encoding to use.

Step-by-Step Breakdown

Let's walk through the code line by line:

  • import java.net.URLDecoder;: We import the URLDecoder class, which is part of the Java Standard Library.
  • import java.nio.charset.StandardCharsets;: We import the StandardCharsets class, which provides a set of standard character encodings.
  • public class UrlDecoder { ... }: We define a new class called UrlDecoder.
  • public static void main(String[] args) throws Exception { ... }: We define a main method that takes an array of String arguments and throws an Exception.
  • String encodedUrl = "https%3A%2F%2Fexample.com%2Fpath%3Fquery%3Dparam";: We define a string variable encodedUrl that contains a URL-encoded string.
  • String decodedUrl = URLDecoder.decode(encodedUrl, StandardCharsets.UTF_8.toString());: We use the URLDecoder class to decode the encodedUrl string using the UTF-8 character encoding.
  • System.out.println(decodedUrl);: We print the decoded URL to the console.

Handling Edge Cases

Here are some common edge cases to consider:

Empty/Null Input

What happens when we pass an empty or null string to the decode method?

String encodedUrl = "";
String decodedUrl = URLDecoder.decode(encodedUrl, StandardCharsets.UTF_8.toString());
System.out.println(decodedUrl); // prints ""

encodedUrl = null;
decodedUrl = URLDecoder.decode(encodedUrl, StandardCharsets.UTF_8.toString());
// throws NullPointerException

As we can see, passing an empty string returns an empty string, while passing a null string throws a NullPointerException.

Invalid Input

What happens when we pass an invalid URL-encoded string to the decode method?

String encodedUrl = " invalid%20input";
String decodedUrl = URLDecoder.decode(encodedUrl, StandardCharsets.UTF_8.toString());
System.out.println(decodedUrl); // prints " invalid input"

In this case, the decode method will still return a decoded string, but it may not be what we expect.

Large Input

What happens when we pass a large URL-encoded string to the decode method?

String encodedUrl = "https%3A%2F%2Fexample.com%2Fpath%3Fquery%3Dparam".repeat(1000);
String decodedUrl = URLDecoder.decode(encodedUrl, StandardCharsets.UTF_8.toString());
System.out.println(decodedUrl); // prints the decoded string

In this case, the decode method will still return a decoded string, but it may take longer to execute.

Unicode/Special Characters

What happens when we pass a URL-encoded string containing Unicode or special characters to the decode method?

String encodedUrl = "https%3A%2F%2Fexample.com%2Fpath%3Fquery%3D%F0%9F%98%80";
String decodedUrl = URLDecoder.decode(encodedUrl, StandardCharsets.UTF_8.toString());
System.out.println(decodedUrl); // prints "https://example.com/path?query="

In this case, the decode method will correctly decode the Unicode character.

Common Mistakes

Here are three common mistakes developers make when URL decoding in Java:

Mistake 1: Using the wrong character encoding

String encodedUrl = "https%3A%2F%2Fexample.com%2Fpath%3Fquery%3Dparam";
String decodedUrl = URLDecoder.decode(encodedUrl, "ISO-8859-1"); // wrong encoding
System.out.println(decodedUrl); // prints incorrect result

Corrected code:

String encodedUrl = "https%3A%2F%2Fexample.com%2Fpath%3Fquery%3Dparam";
String decodedUrl = URLDecoder.decode(encodedUrl, StandardCharsets.UTF_8.toString());
System.out.println(decodedUrl); // prints correct result

Mistake 2: Not handling exceptions

String encodedUrl = null;
String decodedUrl = URLDecoder.decode(encodedUrl, StandardCharsets.UTF_8.toString());
// throws NullPointerException

Corrected code:

String encodedUrl = null;
try {
    String decodedUrl = URLDecoder.decode(encodedUrl, StandardCharsets.UTF_8.toString());
    System.out.println(decodedUrl);
} catch (NullPointerException e) {
    System.out.println("Error: " + e.getMessage());
}

Mistake 3: Not checking for null input

String encodedUrl = "";
String decodedUrl = URLDecoder.decode(encodedUrl, StandardCharsets.UTF_8.toString());
System.out.println(decodedUrl); // prints empty string

Corrected code:

String encodedUrl = "";
if (encodedUrl != null && !encodedUrl.isEmpty()) {
    String decodedUrl = URLDecoder.decode(encodedUrl, StandardCharsets.UTF_8.toString());
    System.out.println(decodedUrl);
} else {
    System.out.println("Error: empty input");
}

Performance Tips

Here are two practical performance tips for URL decoding in Java:

Tip 1: Use a cached decoder

Instead of creating a new URLDecoder instance every time you need to decode a URL, consider using a cached decoder:

private static final URLDecoder decoder = new URLDecoder(StandardCharsets.UTF_8);

public static String decodeUrl(String encodedUrl) throws Exception {
    return decoder.decode(encodedUrl);
}

Tip 2: Avoid unnecessary decoding

If you're working with URLs that are already decoded, avoid unnecessary decoding by checking the input string first:

public static String decodeUrl(String encodedUrl) throws Exception {
    if (encodedUrl.contains("%")) {
        return URLDecoder.decode(encodedUrl, StandardCharsets.UTF_8.toString());
    } else {
        return encodedUrl;
    }
}

FAQ

Q: What is URL decoding?

A: URL decoding is the process of converting a URL-encoded string back to its original form.

Q: Why do I need to URL decode in Java?

A: You need to URL decode in Java when working with web applications that require URL-encoded strings to be converted back to their original form.

Q: What is the difference between URL encoding and URL decoding?

A: URL encoding converts special characters in a string to a URL-safe format, while URL decoding converts a URL-encoded string back to its original form.

Q: Can I use the String.replace() method to URL decode a string?

A: No, the String.replace() method is not suitable for URL decoding, as it does not handle special characters correctly.

Q: How do I handle Unicode characters in URL decoding?

A: Use the StandardCharsets.UTF_8 encoding to handle Unicode characters correctly.

AI agent tools available. The CodeTidy MCP Server gives Claude, Cursor, and other AI agents access to 60+ developer tools. One command: npx @codetidy/mcp