2011-09-07 14 views
5

¿Cómo codificar las URL que contienen Unicode? Me gustaría pasarlo a una utilidad de línea de comandos y necesito codificarlo primero.Url caracteres Unicode que codifican

Ejemplo: http://zh.wikipedia.org/wiki/白雜訊

convierte http://zh.wikipedia.org/wiki/%E7%99%BD%E9%9B%9C%E8%A8%8A.

+0

Parece que el editor de texto Stackoverflow codificó la url Unicode. Me gustaría hacer lo mismo en C#. Haga clic en el enlace para obtener la URL Unicode real. – Tomas

+2

Stack Overflow no hizo esto, ¡tu navegador lo hizo! Muestra la URL como Unicode, pero cuando la copia, el texto copiado contiene la cadena codificada en la URL. –

+0

@KonradRudolph Mi navegador, sin embargo, no lo hizo. Lo veo como lo que supongo que son los caracteres chinos. :) –

Respuesta

7

Usted puede utilizar el método HttpUtility.UrlPathEncode en la asamblea System.Web (requiere el perfil completo de .NET Framework 4):

var encoded = HttpUtility.UrlPathEncode("http://zh.wikipedia.org/wiki/白雜訊"); 
+0

¿Cómo obtener los caracteres Unicode? Los usuarios pasarán la url y no sé dónde aparecen los caracteres Unicode en la url. – Tomas

+0

@Tomas: respuesta actualizada en respuesta a su comentario. –

+1

Tenga en cuenta que UrlPathEncode es lo correcto para los caracteres en la ruta y otras partes de la URL, excepto para el nombre de host. Si tiene caracteres Unicode en el nombre de host de un IRI, entonces para hacer un URI del mismo debe codificarlos usando el algoritmo IDN (Punycode). – bobince

0
Server.UrlEncode(s); 

.NET cadenas son cadenas de forma nativa Unicode (UTF-8 codificados, para ser específicos) por lo que necesita nada más que invocar HttpServerUtility.UrlEncode (aunque la llamada propiedad "intrínseca" Servidor estará disponible en la mayoría de los contextos en asp.net donde puede querer hacer esto).

+0

No quiero codificar: // caracteres, solo caracteres Unicode. – Tomas

+0

Codifica los valores de los parámetros individuales, no la URL completa. – Matthew

+0

Si paso url Unicode a Server.UrlEncode (s) codificará todos los caracteres Unicode junto con caracteres especiales de URL como:,? y // No quiero hacer eso. – Tomas

4

Según MSDN no se puede utilizar UrlPathEncode más.

Así, Forma correcta de hacerlo ahora es,

var urlString = Uri.EscapeUriString("http://zh.wikipedia.org/wiki/白雜訊"); 
0

que tenía un problema de carácter turco. <a href="/@Html.Raw(string)" resolvió el problema

Cuestiones relacionadas