2011-09-07 15 views
5

Jak kodować adresy URL zawierające kodowanie Unicode? Chciałbym przekazać go do narzędzia wiersza polecenia i najpierw muszę go zakodować.Url Znaki Unicode kodujące

przykład: http://zh.wikipedia.org/wiki/白雜訊

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

+0

Wygląda na to, że edytor tekstu Stackoverflow kodował adres URL w Unicode. Chciałbym zrobić to samo w języku C#. Kliknij link, aby uzyskać rzeczywisty adres URL Unicode. – Tomas

+2

Stack Overflow nie zrobił tego - twoja przeglądarka zrobiła to! Wyświetla adres URL jako kod Unicode, ale podczas kopiowania skopiowany tekst zawiera ciąg znaków zakodowany za pomocą adresu URL. –

+0

@KonradRudolph Jednak moja przeglądarka nie. Uważam, że jest to coś, co uważam za chińskie znaki. :) –

Odpowiedz

7

Można użyć metody HttpUtility.UrlPathEncode w zespole System.Web (wymaga pełnego .NET Framework 4 profil):

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

Jak zdobyć znaki Unicode? Adres URL zostanie przekazany przez użytkowników i nie wiem, gdzie w adresie URL pojawiają się znaki Unicode. – Tomas

+0

@ Tom: Zaktualizowana odpowiedź w odpowiedzi na Twój komentarz. –

+1

Należy zauważyć, że UrlPathEncode jest poprawną czynnością dla znaków w ścieżce i innych części adresu URL, z wyjątkiem nazwy hosta. Jeśli posiadasz znaki Unicode w nazwie hosta IRI, to aby utworzyć jego identyfikator URI, musisz zakodować je za pomocą algorytmu IDN (Punycode). – bobince

0
Server.UrlEncode(s); 

NET struny struny natywnie Unicode (UTF-8, za szczególne) więc trzeba niczego więcej niż powołać HttpServerUtility.UrlEncode (choć tak zwane „wewnętrzne” własność Server będzie dostępny większość kontekstów w asp.net, gdzie możesz chcieć to zrobić).

+0

Nie chcę kodować: // znaków, tylko znaki Unicode. – Tomas

+0

Kodujesz poszczególne wartości parametrów, a nie cały adres URL. – Matthew

+0

Jeśli przekażę adres URL kodu Unicode do kodu Server.UrlEncode, kodowane będą wszystkie znaki Unicode wraz ze specjalnymi znakami URL, takimi jak:,? i // Nie chcę tego robić. – Tomas

4

Zgodnie z MSDN nie można używać UrlPathEncode więcej.

więc poprawny sposób robi to już jest,

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

miałem tureckiej problemu znaków. <a href="/@Html.Raw(string)" rozwiązał problem