2009-02-05 11 views
6

Tengo una URL que requiere algunos parámetros. Los valores de esos parámetros pueden ser caracteres acentuados, por lo que es absolutamente necesario urlEncode them. Extrañamente, veo una diferencia entre el comportamiento o Javascript y .NET.UrlEncode - Javascript vs. C#

Supongamos que trato de urlEncoder la palabra "éléphant". En JavaScript (según este sitio web: http://www.albionresearch.com/misc/urlencode.php), obtengo lo siguiente:% E9l% E9phant. Esto parece correcto para mí. Sin embargo, en .NET con esta llamada (System.Web.HttpUtility.UrlEncode ("éléphant")) obtengo "% c3% a9l% c3% a9phant". ¿Qué pasa? ¿Qué me estoy perdiendo? ¿Qué debo hacer si deseo obtener% E9l% E9phant en .NET?

Gracias!

+0

Tuve exactamente el mismo problema en este momento. Gracias por hacer la pregunta "para mí", me hizo llegar al problema bastante rápido. –

Respuesta

10

System.Web.HttpUtility.UrlEncode utilizará UTF-8 (creo ..) como su codificador predeterminado, puede cambiar este especificando uno ..

System.Web.HttpUtility.UrlEncode("éléphant", Encoding.Default); // %e9l%e9phant 

Aunque puede ser preferible especificar una real página de códigos o no, en lugar de confiar en el sistema operativo predeterminado.

5

Referencia:

js:  %E9 l  %E9 phant 
.net: %c3 %a9 l %c3 %a9 phant 

La diferencia es que uno es la codificación URL UTF-8 mientras que el otro le está dando la codificación ANSI URL.

En .NET, probar:

Dim a As String = System.Web.HttpUtility.UrlEncode(_ 
    "éléphant", _ 
    Text.Encoding.Default) 

me sale

%e9 l  %e9 phant 

como resultado. Eso coincide con la cadena que proporcionó para JavaScript, a excepción del caso Hex Character.

3

Encoding.Default solo funcionará para usted si la página de códigos actual de su sistema está configurada en Europa Occidental. Ahora bien, esto podría ser importante si el Javascript también se está ejecutando en la misma máquina que el codificador .NET, pero si no, entonces usted puede forzar a la página de códigos a la occidental europeo:

System.Web.HttpUtility.UrlEncode("éléphant", Encoding.GetEncoding(1252)); 
2

También podría tratar de base 64 Codificándolos.

Hay un previous post que trata de hacerlo en JavaScript.

En cuanto a .NET, hay muchos ejemplos que muestran cómo hacerlo. Aquí hay uno I found de Google.

Por supuesto, las cadenas pueden ser un poco más grandes que urlencoding. Sin embargo, se ofuscarán, lo que puede ser una ventaja según la aplicación.

6

En JavaScript (según este sitio web: http://www.albionresearch.com/misc/urlencode.php), obtengo lo siguiente:% E9l% E9phant.

Esa página es incorrecta. JavaScript también usa UTF-8, ya que .NET lo hace de forma predeterminada. Pruébelo usted mismo:

javascript:alert(encodeURIComponent('éléphant')) 
%C3%A9l%C3%A9phant 

Las URL de hoy son UTF-8. No intente usar cp1252 más. UTF-8 es tu amigo. Confíe en UTF-8!