How to Encode and Decode URL in C#
By FoxLearn 1/14/2025 2:29:25 AM 315
Not all characters are valid in a URL. To ensure that special characters are properly transmitted over the internet, we need to encode them using a process called URI Encoding.
This involves converting invalid characters into a valid format, typically percent-encoded, before sending them in a URL. The reverse process, called URI Decoding, restores the encoded characters to their original form.
In a URL, characters are classified as reserved or unreserved. Reserved characters have special meanings and are used to define parts of the URL.
For example, the ?
character marks the start of query parameters. RFC3986 specifies the list of reserved and unreserved characters.
Reserved characters include: ! # $ & ‘ ( ) * + , / : ; = ? @ [ ]
These characters are used for specific purposes in the URL structure, such as separating components or defining query parameters. Unreserved characters can be used freely without special meaning.
Reserved characters in a URL need to be encoded to ensure they are transmitted correctly. This is done by converting the character to its hexadecimal ASCII byte value, preceded by a %
symbol (e.g., a space becomes %20
). This process is known as percent-encoding.
How to Encode and Decode URI Using the HttpUtility in C#
The HttpUtility
class, found in the System.Web
namespace, provides the UrlEncode()
and UrlDecode()
methods for encoding and decoding URLs. These methods help convert special characters in a URL to their percent-encoded form and vice versa, making URL manipulation easier in web applications.
var url = @"https://www.example.com/search?q=hello world&lang=en";
C# Encode URL using HttpUtility
// example c# encode url var httpUtilityEncoded = HttpUtility.UrlEncode(url); // https%3A%2F%2Fwww.example.com%2Fsearch%3Fq%3Dhello+world%26lang%3Den
C# Decode URL using HttpUtility
// example c# decode url var httpUtilityDecoded = HttpUtility.UrlDecode(httpUtilityEncoded); // https://www.example.com/search?q=hello world&lang=en
The UrlEncode()
and UrlDecode()
methods in the HttpUtility
class take a string parameter containing the URL to be encoded or decoded. By default, they use UTF-8 encoding, but you can specify a different encoding using method overloads. Additionally, there are overloads that allow you to work with a Byte[]
instead of a string for encoding and decoding URLs.
How to Encode and Decode Using the WebUtility in C#
To encode a URL, you can use the WebUtility.UrlEncode
method. This method will convert special characters in a URL (like spaces, ampersands, etc.) into their corresponding percent-encoded values.
C# Encode URL using WebUtility
string url = "https://www.example.com/search?q=hello world&lang=en"; string encodedUrl = WebUtility.UrlEncode(url);
C# Decode URL using WebUtility
To decode a URL, you can use the WebUtility.UrlDecode
method. This will reverse the encoding and return the original string.
string encodedUrl = "https%3A%2F%2Fwww.example.com%2Fsearch%3Fq%3Dhello+world%26lang%3Den"; string decodedUrl = WebUtility.UrlDecode(encodedUrl);
If you're not working within a web application, the documentation recommends using the WebUtility
class (from the System.Net
namespace) for URL encoding and decoding, instead of the HttpUtility
class.
How to Encode and Decode Using the Uri in C#
Alternatively, you can use the Uri
class, which provides methods for encoding and decoding individual components of a URL (e.g., query parameters, path, etc.).
C# Encode using Uri
var uriEncoded = Uri.EscapeDataString(url); Console.WriteLine(uriEncoded); // https%3A%2F%2Fwww.example.com%2Fsearch%3Fq%3Dhello+world%26lang%3Den
C# Decode using Uri
var uriDecoded = Uri.UnescapeDataString(uriEncoded); Console.WriteLine(uriDecoded); // https://www.example.com/search?q=hello world&lang=en
There are subtle differences between how HttpUtility.UrlEncode()
, WebUtility.UrlEncode()
, and Uri.EscapeDataString
encode URLs
HttpUtility.UrlEncode()
produces lowercase encoding (e.g.,?
becomes%3f
).WebUtility.UrlEncode()
andUri.EscapeDataString
produce uppercase encoding (e.g.,?
becomes%3F
).HttpUtility.UrlEncode()
andWebUtility.UrlEncode()
encode spaces as+
.Uri.EscapeDataString
encodes spaces as%20
.- Characters like
!
,(
,)
,*
, and~
are encoded differently across the methods, which might influence your choice of implementation. Uri.EscapeDataString
has a character limit of 32,766 characters. Exceeding this limit will throw aUriFormatException
. For very long URLs, it's better to useHttpUtility.UrlEncode
orWebUtility.UrlEncode
.
- How to fix 'Failure sending mail' in C#
- How to Parse a Comma-Separated String from App.config in C#
- How to convert a dictionary to a list in C#
- How to retrieve the Executable Path in C#
- How to validate an IP address in C#
- How to retrieve the Downloads Directory Path in C#
- C# Tutorial
- Dictionary with multiple values per key in C#