You're correct that the Query property of the UriBuilder class will wrongly encode non-ASCII characters. This is because the Query property uses the HttpUtility.UrlEncode method to encode the query string, which only encodes ASCII characters.
To properly encode non-ASCII characters in the query string, you can use the Uri.EscapeDataString method instead. Here's an example of how to use Uri.EscapeDataString to build a URI with a query string that includes non-ASCII characters:
var builder = new UriBuilder("https://example.com/path/to/resource"); builder.Query = $"param1={Uri.EscapeDataString("non-ASCII text")}"; var uri = builder.Uri; In this example, we're creating a UriBuilder with a base URI of "https://example.com/path/to/resource". We're then setting the Query property of the UriBuilder to include a query string parameter named "param1" with a value of "non-ASCII text", which we've properly encoded using Uri.EscapeDataString.
Finally, we're getting the Uri property of the UriBuilder, which returns a System.Uri object representing the complete URI.
"UriBuilder Query non-ASCII encoding issue"
UriBuilder uriBuilder = new UriBuilder("https://example.com"); uriBuilder.Query = "param=caf��"; string resultUrl = uriBuilder.ToString(); "C# UriBuilder Query encoding non-ASCII characters"
UriBuilder uriBuilder = new UriBuilder("https://example.com"); string encodedParam = Uri.EscapeDataString("caf��"); uriBuilder.Query = $"param={encodedParam}"; string resultUrl = uriBuilder.ToString(); "UriBuilder Query encoding UTF-8"
UriBuilder uriBuilder = new UriBuilder("https://example.com"); string encodedParam = Uri.EscapeDataString("caf��"); uriBuilder.Query = $"param={encodedParam}&lang=fr"; string resultUrl = uriBuilder.ToString(); "C# UriBuilder Query and non-ASCII characters in paths"
UriBuilder uriBuilder = new UriBuilder("https://example.com"); uriBuilder.Path = "/path/caf��"; uriBuilder.Query = "param=value"; string resultUrl = uriBuilder.ToString(); "UriBuilder Query encoding non-ASCII characters best practices"
UriBuilder uriBuilder = new UriBuilder("https://example.com"); string encodedParam = Uri.EscapeDataString("caf��"); uriBuilder.Query = $"param={encodedParam}"; string resultUrl = uriBuilder.Uri.ToString(); "C# UriBuilder Query Unicode characters encoding"
UriBuilder uriBuilder = new UriBuilder("https://example.com"); string encodedParam = Uri.EscapeDataString("caf��"); uriBuilder.Query = $"param={encodedParam}"; string resultUrl = uriBuilder.Uri.ToString(); "UriBuilder Query and special characters encoding"
UriBuilder uriBuilder = new UriBuilder("https://example.com"); uriBuilder.Query = "param=value&special=!@#$"; string resultUrl = uriBuilder.Uri.ToString(); "C# UriBuilder Query and non-ASCII character decoding"
UriBuilder uriBuilder = new UriBuilder("https://example.com"); uriBuilder.Query = "param=caf%C3%A9"; string decodedParam = Uri.UnescapeDataString(uriBuilder.Query); "UriBuilder Query and Unicode character support"
UriBuilder uriBuilder = new UriBuilder("https://example.com"); string unicodeParam = "����"; uriBuilder.Query = $"param={Uri.EscapeDataString(unicodeParam)}"; string resultUrl = uriBuilder.Uri.ToString(); "C# UriBuilder Query encoding with non-ASCII characters in fragments"
UriBuilder uriBuilder = new UriBuilder("https://example.com"); uriBuilder.Fragment = "caf��"; string resultUrl = uriBuilder.Uri.ToString(); formset pydroid string-length sqlexception uft14 aforge netsuite android-4.2-jelly-bean unset src