2011-09-07 19 views
5

Come codificare gli URL contenenti Unicode? Vorrei passare a un programma di utilità della riga di comando e ho bisogno di codificarlo per primo.Url Codifica caratteri Unicode

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

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

+0

Sembra che l'editor di testo StackOverflow codifica l'URL Unicode. Mi piacerebbe fare lo stesso in C#. Clicca sul link per ottenere l'url Unicode attuale. – Tomas

+2

Stack Overflow non ha fatto questo: il tuo browser lo ha fatto! Visualizza l'URL come Unicode, ma quando lo copi, il testo copiato contiene la stringa con codifica URL. –

+0

@KonradRudolph Il mio browser, tuttavia, no. Lo vedo come quello che presumo essere un personaggio cinese. :) –

risposta

7

È possibile utilizzare il metodo HttpUtility.UrlPathEncode nell'assemblea System.Web (richiede il profilo completo .NET Framework 4):

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

Come ottenere caratteri Unicode? L'url verrà passato dagli utenti e non so dove vengono visualizzati i caratteri Unicode nell'URL. – Tomas

+0

@Tomas: risposta aggiornata in risposta al tuo commento. –

+1

Nota che UrlPathEncode è la cosa giusta da fare per i caratteri nel percorso e in altre parti dell'URL, ad eccezione del nome host. Se si dispone di caratteri Unicode nel nome host di un IRI, per crearne un URI è necessario codificarli utilizzando l'algoritmo IDN (Punycode). – bobince

0
Server.UrlEncode(s); 

.NET le stringhe sono stringhe nativamente Unicode (UTF-8 codificati, per essere precisi) quindi è necessario niente di più che invocare HttpServerUtility.UrlEncode (anche se la cosiddetta proprietà Server "intrinseca" sarà disponibile in la maggior parte dei contesti in asp.net in cui si potrebbe voler fare questo).

+0

Non voglio codificare: // caratteri, solo caratteri Unicode. – Tomas

+0

Codifica i singoli valori dei parametri, non l'intero URL. – Matthew

+0

Se si passa l'URL unicode a Server.UrlEncode (s) codificherà tutti i caratteri Unicode insieme a caratteri URL speciali come:,? e // non voglio farlo. – Tomas

4

Secondo MSDN non è possibile utilizzare più UrlPathEncode.

Così, modo corretto di farlo è questo, in

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

Ho avuto problemi di carattere turco. <a href="/@Html.Raw(string)" risolto il problema