2011-09-07 50 views
5

Làm cách nào để mã hóa URL có chứa Unicode? Tôi muốn chuyển nó đến tiện ích dòng lệnh và tôi cần mã hóa nó trước.Mã hóa ký tự Unicode Url

Ví dụ: http://zh.wikipedia.org/wiki/白雜訊

trở thành http://zh.wikipedia.org/wiki/%E7%99%BD%E9%9B%9C%E8%A8%8A.

+0

Dường như url Unicode được mã hóa của trình soạn thảo văn bản Stackoverflow. Tôi muốn làm tương tự trong C#. Nhấp vào liên kết để nhận url Unicode thực tế. – Tomas

+2

Ngăn xếp ngăn xếp không làm điều này - trình duyệt của bạn đã làm! Nó hiển thị URL dưới dạng Unicode nhưng khi bạn sao chép nó, văn bản đã sao chép chứa chuỗi được mã hóa URL. –

+0

@KonradRudolph Trình duyệt của tôi, tuy nhiên, không. Tôi thấy nó như những gì tôi cho là nhân vật Trung Quốc. :) –

Trả lời

7

Bạn có thể sử dụng phương pháp HttpUtility.UrlPathEncode trong lắp ráp System.Web (yêu cầu đầy đủ .NET Framework 4 hồ sơ):

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

Cách nhận các ký tự Unicode? Url sẽ được người dùng chuyển và tôi không biết các ký tự Unicode xuất hiện trong url. – Tomas

+0

@Tomas: Đã cập nhật câu trả lời theo phản hồi của bạn. –

+1

Lưu ý rằng UrlPathEncode là điều đúng để thực hiện cho các ký tự trong đường dẫn và các phần khác của URL ngoại trừ tên máy chủ. Nếu bạn có các ký tự Unicode trong tên máy của một IRI, thì để tạo một URI của nó, bạn phải mã hóa chúng bằng thuật toán IDN (Punycode). – bobince

0
Server.UrlEncode(s); 

NET chuỗi là chuỗi natively Unicode (UTF-8 mã hóa, được cụ thể), do đó bạn cần phải gì khác hơn là gọi HttpServerUtility.UrlEncode (mặc dù cái gọi là "nội tại" sở hữu máy chủ sẽ có mặt tại hầu hết các ngữ cảnh trong asp.net nơi bạn có thể muốn làm điều này).

+0

Tôi không muốn mã hóa: // ký tự, chỉ ký tự Unicode. – Tomas

+0

Bạn mã hóa các giá trị tham số riêng lẻ, không phải toàn bộ url. – Matthew

+0

Nếu tôi chuyển url unicode tới Server.UrlEncode (s) nó sẽ mã hóa tất cả các ký tự unicode cùng với các ký tự url đặc biệt như:,? và// Tôi không muốn làm điều đó. – Tomas

4

Theo MSDN bạn không thể sử dụng UrlPathEncode nữa.

Vì vậy, cách đúng để làm việc đó bây giờ là,

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

Tôi có vấn đề nhân vật Thổ Nhĩ Kỳ. <a href="/@Html.Raw(string)" đã giải quyết được sự cố

Các vấn đề liên quan