c# javascript .net windows encoding

¿C#tiene un equivalente a encodeURIComponent() de JavaScript?



.net windows (7)

Para una aplicación de la tienda de Windows, no tendrá HttpUtility. En cambio, tienes:

Para un URI, antes del ''?'':

  • Sistema. Uri.EscapeUriString ("example.com/Stack Overflow ++?")
    • -> "example.com/Stack%20Overflow++?"

Para un nombre o valor de consulta de URI, después del ''?'':

  • Sistema. Uri.EscapeDataString ("Desbordamiento de pila ++")
    • -> "Stack% 20Overflow% 2B% 2B"

Para un nombre o valor de una consulta x-www-form-urlencoded , en un contenido POST:

  • System.Net. WebUtility.UrlEncode ("Desbordamiento de pila ++")
    • -> "Pila + desbordamiento% 2B% 2B"

En JavaScript:

encodeURIComponent("©√") == "%C2%A9%E2%88%9A"

¿Hay un equivalente para las aplicaciones de C #? Para escapar de los caracteres HTML que utilicé:

txtOut.Text = Regex.Replace(txtIn.Text, @"[/u0080-/uFFFF]", m => @"&#" + ((int)m.Value[0]).ToString() + ";");

Pero no estoy seguro de cómo convertir la coincidencia al formato hexadecimal correcto que utiliza JS. Por ejemplo, este código:

txtOut.Text = Regex.Replace(txtIn.Text, @"[/u0080-/uFFFF]", m => @"%" + String.Format("{0:x}", ((int)m.Value[0])));

Devuelve " %a9%221a" para "©√" lugar de "%C2%A9%E2%88%9A" . Parece que necesito dividir la cadena en bytes o algo así.

Editar: Esto es para una aplicación de Windows, los únicos elementos disponibles en System.Web son: AspNetHostingPermission , AspNetHostingPermissionAttribute y AspNetHostingPermissionLevel .


Pruebe Server.UrlEncode() o System.Web.HttpUtility.UrlEncode() para las instancias en las que no tiene acceso al objeto Server . También puede usar System.Uri.EscapeUriString() para evitar agregar una referencia al ensamblado System.Web .


Puede usar el objeto Servidor en el espacio de nombres System.Web

Server.UrlEncode, Server.UrlDecode, Server.HtmlEncode y Server.HtmlDecode.

Editar: el póster agregó que se trataba de una aplicación de Windows y no de una web como se creería. Los elementos enumerados anteriormente estarían disponibles en la clase HttpUtility dentro de System.Web, que debe agregarse como referencia al proyecto.


System.Uri.EscapeUriString () no pareció hacer nada, pero System.Uri.Escape Data String () funcionó para mí.


Traté de hacer un análogo completo compatible de encodeURIComponent de JavaScript para c # y después de mis experimentos de 4 horas encontré esto

c # CÓDIGO:

string a = "!@#$%^&*()_+ some text here али мамедов баку"; a = System.Web.HttpUtility.UrlEncode(a); a = a.Replace("+", "%20");

el resultado es: !% 40% 23% 24% 25% 5e% 26 * () _% 2b% 20some% 20text% 20here% 20% d0% b0% d0% bb% d0% b8% 20% d0% bc% d0% b0% d0% bc% d0% b5% d0% b4% d0% ser% d0% b2% 20% d0% b1% d0% b0% d0% ba% d1% 83

Después de decodificarlo con decodeURLComponent () de Javascript;

obtendrás esto :! @ # $% ^ & * () _ + texto aquí y мамедов баку

Gracias por su atención


HttpUtility.HtmlEncode / Decode
HttpUtility.UrlEncode / Decode

Puede agregar una referencia al ensamblado System.Web si no está disponible en su proyecto


Uri.EscapeDataString o HttpUtility.UrlEncode es la forma correcta de escapar de una cadena destinada a ser parte de una URL.

Tomemos como ejemplo la cadena "" :

  • HttpUtility.UrlEncode("") -> "Stack+Overflow"

  • Uri.EscapeUriString("") -> "Stack%20Overflow"

  • Uri.EscapeDataString("Stack + Overflow") -> También codifica "+" to "%2b" ----> Stack%20%2B%20%20Overflow

Solo el último último es correcto cuando se usa como una parte real de la URL (a diferencia del valor de uno de los parámetros de cadena de consulta)