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

How to URL decode in C#

How to URL Decode in C#

URL decoding is the process of converting a URL-encoded string back to its original form. This is an important step when working with URLs in C#, as URL encoding can introduce special characters and escape sequences that need to be removed before the string can be used. In this article, we will explore how to URL decode in C#, including a quick example, a step-by-step breakdown, and tips for handling edge cases and improving performance.

Quick Example

Here is a minimal example of how to URL decode a string in C#:

using System;
using System.Web;

class Program
{
    static void Main()
    {
        string encodedUrl = "https%3A%2F%2Fexample.com%2Fpath%3Fquery%3Dparam";
        string decodedUrl = HttpUtility.UrlDecode(encodedUrl);
        Console.WriteLine(decodedUrl);
    }
}

This code uses the HttpUtility.UrlDecode method to decode the input string. The HttpUtility class is part of the System.Web namespace, so you will need to add a reference to this namespace to use this method.

Step-by-Step Breakdown

Let's break down the code line by line:

  • using System;: This line imports the System namespace, which is required for the Console.WriteLine statement.
  • using System.Web;: This line imports the System.Web namespace, which is required for the HttpUtility class.
  • class Program { ... }: This defines a new C# class called Program.
  • static void Main() { ... }: This defines the Main method, which is the entry point for the program.
  • string encodedUrl = "https%3A%2F%2Fexample.com%2Fpath%3Fquery%3Dparam";: This line defines a string variable encodedUrl and assigns it a URL-encoded value.
  • string decodedUrl = HttpUtility.UrlDecode(encodedUrl);: This line uses the HttpUtility.UrlDecode method to decode the input string and assigns the result to a new string variable decodedUrl.
  • Console.WriteLine(decodedUrl);: This line prints the decoded URL to the console.

Handling Edge Cases

Here are some common edge cases to consider when working with URL decoding:

Empty/Null Input

If the input string is empty or null, the HttpUtility.UrlDecode method will throw an exception. To handle this case, you can add a simple null check:

string encodedUrl = null;
if (!string.IsNullOrEmpty(encodedUrl))
{
    string decodedUrl = HttpUtility.UrlDecode(encodedUrl);
    Console.WriteLine(decodedUrl);
}
else
{
    Console.WriteLine("Input string is empty or null");
}

Invalid Input

If the input string is not a valid URL-encoded string, the HttpUtility.UrlDecode method may throw an exception or produce unexpected results. To handle this case, you can use a try-catch block:

try
{
    string encodedUrl = " invalid url-encoded string ";
    string decodedUrl = HttpUtility.UrlDecode(encodedUrl);
    Console.WriteLine(decodedUrl);
}
catch (Exception ex)
{
    Console.WriteLine("Invalid input string: " + ex.Message);
}

Large Input

If the input string is very large, the HttpUtility.UrlDecode method may throw an exception or produce unexpected results. To handle this case, you can use a streaming approach:

using (var reader = new StreamReader(encodedUrl))
{
    var decodedUrl = HttpUtility.UrlDecode(reader.ReadToEnd());
    Console.WriteLine(decodedUrl);
}

Unicode/Special Characters

If the input string contains Unicode or special characters, the HttpUtility.UrlDecode method may not handle them correctly. To handle this case, you can use the System.Web.HttpUtility.UrlDecode method with the System.Text.Encoding.UTF8 encoding:

string encodedUrl = "https%3A%2F%2Fexample.com%2Fpath%3Fquery%3Dparam%20%3F%3D%20%u2605";
string decodedUrl = HttpUtility.UrlDecode(encodedUrl, System.Text.Encoding.UTF8);
Console.WriteLine(decodedUrl);

Common Mistakes

Here are some common mistakes developers make when working with URL decoding:

Mistake 1: Not handling null input

Incorrect code:

string encodedUrl = null;
string decodedUrl = HttpUtility.UrlDecode(encodedUrl);

Corrected code:

string encodedUrl = null;
if (!string.IsNullOrEmpty(encodedUrl))
{
    string decodedUrl = HttpUtility.UrlDecode(encodedUrl);
    Console.WriteLine(decodedUrl);
}
else
{
    Console.WriteLine("Input string is empty or null");
}

Mistake 2: Not handling invalid input

Incorrect code:

string encodedUrl = " invalid url-encoded string ";
string decodedUrl = HttpUtility.UrlDecode(encodedUrl);

Corrected code:

try
{
    string encodedUrl = " invalid url-encoded string ";
    string decodedUrl = HttpUtility.UrlDecode(encodedUrl);
    Console.WriteLine(decodedUrl);
}
catch (Exception ex)
{
    Console.WriteLine("Invalid input string: " + ex.Message);
}

Mistake 3: Not handling large input

Incorrect code:

string encodedUrl = " very large url-encoded string ";
string decodedUrl = HttpUtility.UrlDecode(encodedUrl);

Corrected code:

using (var reader = new StreamReader(encodedUrl))
{
    var decodedUrl = HttpUtility.UrlDecode(reader.ReadToEnd());
    Console.WriteLine(decodedUrl);
}

Performance Tips

Here are some performance tips for URL decoding in C#:

  • Use the HttpUtility.UrlDecode method instead of System.Web.HttpUtility.UrlDecode for better performance.
  • Use a streaming approach for large input strings to avoid loading the entire string into memory.
  • Avoid using System.Text.Encoding.UTF8 encoding unless necessary, as it can slow down the decoding process.

FAQ

Q: What is the difference between HttpUtility.UrlDecode and System.Web.HttpUtility.UrlDecode?

A: HttpUtility.UrlDecode is a more lightweight and efficient version of System.Web.HttpUtility.UrlDecode.

Q: How do I handle null input?

A: Use a null check before calling HttpUtility.UrlDecode.

Q: How do I handle invalid input?

A: Use a try-catch block to catch exceptions thrown by HttpUtility.UrlDecode.

Q: How do I handle large input?

A: Use a streaming approach to avoid loading the entire string into memory.

Q: How do I handle Unicode/special characters?

A: Use the System.Web.HttpUtility.UrlDecode method with the System.Text.Encoding.UTF8 encoding.

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