Codificación de URL en C#

Bilal Shahid 12 octubre 2023
  1. Utilice ASCII simple para codificar caracteres en C#
  2. Diferentes opciones de codificación de URL en C#
  3. Otras funciones de codificación presentes en System.Web en C#
  4. Utilice Uri.HexEscape() para modificar caracteres individuales en una cadena en C#
  5. Use Temboo para codificar URL en C#
  6. Conclusión
Codificación de URL en C#

Este artículo discutirá cómo codificar una URL en C#.

Utilice ASCII simple para codificar caracteres en C#

Representa el valor DECIMAL de cada carácter del teclado. Por lo tanto, este valor DECIMAL se puede sustituir por uno de los caracteres de una cadena y luego codificarse de manera eficiente.

using System;

class Program {
  static void Main(string[] args) {
    string s = "DelftStack";
    string ascii_convert = "";
    foreach (char c in s) {
      ascii_convert += System.Convert.ToInt32(c);
    }
    Console.WriteLine("The converted ascii string is: " + ascii_convert);
  }
}

Tenga en cuenta que System.Convert.ToInt32() tiende a presentar la representación DECIMAL de un carácter en una cadena. Una vez que se convierte el carácter, su valor se agrega a la nueva cadena ASCII_CONVERT, que ahora representa la cadena codificada.

En lugar de usar DECIMAL, puede incluso elegir conversiones “BINARIO”, OCTAL o HEXADECIMAL para sus necesidades de codificación.

Diferentes opciones de codificación de URL en C#

En C#, tenemos una variedad de funciones de codificación para usar. Muchos convierten caracteres a diferentes notaciones, como URL, URI, HEX, etc.

Avancemos y escribamos una función para convertir una URL simple a estas diversas notaciones.

Primero, agregue el espacio de nombres System.Web a nuestro archivo de código. Luego llame a la función para codificar la cadena en formato URL que convertirá /, ., " en la cadena a su representación ASCII (hexadecimal).

using System;
using System.Web;

class Program {
  static void Main(string[] args) {
    Console.WriteLine(HttpUtility.UrlEncode("https://www.google.com"));
  }
}

Producción :

https%3a%2f%2fwww.google.com

Muchas veces tal representación causará problemas en el reconocimiento por parte de otros sistemas. Se recomienda asegurarse de codificar solo la información no tan importante.

En el ejemplo anterior, siempre querríamos que google fuera accesible. Sin embargo, una representación en otro formato puede dejarla nula e irreconocible.

Por lo tanto, es necesario llamar a la codificación en términos que pertenecen a la URL pero que son específicos del usuario. Digamos ahora que busco "Mundo" en Google.

La URL se convertiría en:

https://www.google.com/search?q=World

La q aquí significa Consulta. Use el siguiente código para codificarlo.

Código de ejemplo:

using System;
using System.Web;

class Program {
  static void Main(string[] args) {
    Console.WriteLine("https://www.google.com/search" + HttpUtility.UrlEncode("?q=World"));
  }
}

Producción :

https://www.google.com/search%3fq%3dWorld

Otras funciones de codificación presentes en System.Web en C#

Código de ejemplo:

using System;
using System.Web;

class Program {
  static void Main(string[] args) {
    Console.WriteLine("URL ENCODE UNICODE: " +
                      HttpUtility.UrlEncodeUnicode("https://www.google.com/search?q=World"));
    Console.WriteLine("URL PATH ENCODE: " +
                      HttpUtility.UrlPathEncode("https://www.google.com/search?q=World"));
    Console.WriteLine("URI ESCAPE DATASTRING: " +
                      Uri.EscapeDataString("https://www.google.com/search?q=World"));
    Console.WriteLine("URL ESCAPE URI STRING: " +
                      Uri.EscapeUriString("https://www.google.com/search?q=World"));
    Console.WriteLine("HTML ENCODE: " +
                      HttpUtility.HtmlEncode("https://www.google.com/search?q=World"));
    Console.WriteLine("HTML ATTRIBUTE ENCODE: " +
                      HttpUtility.HtmlAttributeEncode("https://www.google.com/search?q=World"));
  }
}

Producción :

URL ENCODE UNICODE: https%3a%2f%2fwww.google.com%2fsearch%3fq%3dWorld
URL PATH ENCODE: https://www.google.com/search?q=World
URI ESCAPE DATASTRING: https%3A%2F%2Fwww.google.com%2Fsearch%3Fq%3DWorld
URL ESCAPE URI STRING: https://www.google.com/search?q=World
HTML ENCODE: https://www.google.com/search?q=World
HTML ATTRIBUTE ENCODE: https://www.google.com/search?q=World

Tenga en cuenta que HttpUtility.UrlPathEncode(), Uri.EscapeUriString(), HttpUtility.HtmlEncode() y HttpUtility.HtmlAttributeEncode() tienden a presentar los mismos resultados que la cadena no codificada.

Utilice Uri.HexEscape() para modificar caracteres individuales en una cadena en C#

Vamos a crear una función para modificar aleatoriamente los caracteres en una cadena de URL en C# y luego devolver la cadena codificada.

static string encoded_url(string param) {
  Random rd = new Random();
  int rand_num = rd.Next(0, param.Length - 1);
  param = param.Remove(rand_num, 1);
  param = param.Insert(rand_num, Uri.HexEscape(param[rand_num]));

  return param;
}

Llame al principal de la siguiente manera.

Console.WriteLine("URI HEX ESCAPE for 'GOOGLE', called at 1: " +
                  encoded_url("https://www.google.com/search?q=World"));
Console.WriteLine("URI HEX ESCAPE for 'GOOGLE', called at 2: " +
                  encoded_url("https://www.google.com/search?q=World"));
Console.WriteLine("URI HEX ESCAPE for 'GOOGLE', called at 3: " +
                  encoded_url("https://www.google.com/search?q=World"));

Código fuente completo:

using System;
using System.Web;

class Program {
  static string encoded_url(string param) {
    Random rd = new Random();
    int rand_num = rd.Next(0, param.Length - 1);
    param = param.Remove(rand_num, 1);  /// returning the
    param = param.Insert(rand_num, Uri.HexEscape(param[rand_num]));

    return param;
  }

  static void Main(string[] args) {
    // string s = Console.ReadLine();
    // string ascii_convert = "";
    // foreach (char c in s)
    //{
    //     ascii_convert += System.Convert.ToInt32(c);
    // }
    // Console.WriteLine("The converted ascii string is: " + ascii_convert);
    // Console.ReadKey();

    Console.WriteLine("URI HEX ESCAPE for 'GOOGLE', called at 1: " +
                      encoded_url("https://www.google.com/search?q=World"));
    Console.WriteLine("URI HEX ESCAPE for 'GOOGLE', called at 2: " +
                      encoded_url("https://www.google.com/search?q=World"));
    Console.WriteLine("URI HEX ESCAPE for 'GOOGLE', called at 3: " +
                      encoded_url("https://www.google.com/search?q=World"));
  }
}

Producción :

URI HEX ESCAPE for 'GOOGLE', called at 1: https://www.%6Foogle.com/search?q=World
URI HEX ESCAPE for 'GOOGLE', called at 2: https://www.go%67gle.com/search?q=World
URI HEX ESCAPE for 'GOOGLE', called at 3: https://www.google%63com/search?q=World

Vea cómo los caracteres se convierten a sus representaciones HEX en posiciones aleatorias. También puede usar esta función URI.HexEscape() en un bucle para modificar la cadena completa o los caracteres deseados.

URLENCODE permanece mejor para la compatibilidad y el uso del navegador. Además, para aclarar el uso de URI y HTTPUTILITY, recuerde que URI se hereda de la clase SYSTEM, ya presente en el código C# del cliente.

Si no está usando SYSTEM.WEB, es mejor que use URI y luego llame a las funciones de codificación.

Sin embargo, usar SYSTEM.WEB como espacio de nombres no debería ser un problema en muchos casos. En caso de que su proyecto esté compilado en PERFIL DE CLIENTE DE .NET FRAMEWORK, no hay mucho que pueda hacer excepto copiar los archivos de código en un nuevo proyecto.

El PERFIL DE CLIENTE DE .NET FRAMEWORK no podrá utilizar SYSTEM.WEB. Se debe utilizar .NET FRAMEWORK 4 simple al nombrar SYSTEM.WEB.

Use Temboo para codificar URL en C#

Una API llamada TEMBOO tiende a codificar una URL perfectamente.

Código de ejemplo:

// the NAMESPACES TO USE BEFORE UTILIZING THEIR CODE
using Temboo.Core;
using Temboo.Library.Utilities.Encoding;

TembooSession session = new TembooSession("ACCOUNT_NAME", "APP_NAME", "APP_KEY");

URLEncode urlEncodeChoreo = new URLEncode(session);

urlEncodeChoreo.setText("https://www.google.com/search?q=");

URLEncodeResultSet urlEncodeResults = urlEncodeChoreo.execute();

Console.WriteLine(urlEncodeResults.URLEncodedText);

Conclusión

Mientras codifica, asegúrese de que haya caracteres ilegales que se convertirán. Si no lo hace, cambie a la primera solución y cree una función mixta que utilizará los casos SWITCH para determinar qué partes codificar y cuáles no codificar.

Al final, la codificación depende del usuario. Una función que podría cambiar caracteres ilegales y ASCII necesitaría un decodificador similar en el extremo opuesto.

Por lo tanto, es mejor usarlo en un sistema con un codificador/descodificador global para URL/cadenas.

Bilal Shahid avatar Bilal Shahid avatar

Hello, I am Bilal, a research enthusiast who tends to break and make code from scratch. I dwell deep into the latest issues faced by the developer community and provide answers and different solutions. Apart from that, I am just another normal developer with a laptop, a mug of coffee, some biscuits and a thick spectacle!

GitHub